问个关于服务器采用事件驱动还是多线程的问题
时间:2010-08-30
来源:互联网
看到说Ngix是基于事件驱动的服务器,性能很好。我就有个疑问,事件驱动不是单线执行的吗?怎么可能获得很好的性能?
以上猜测基于我对事件的理解,我已经隐隐觉得我可能全盘理解错了,希望能得到正确的答案。
假如以LINUX的信号和handler为准,当一个连接的数据传递来了之后,发出SIGIO或者SIGPOLL信号,然后我注册的handler开始执行,进行数据的读,并且处理之后通过socket发送回去。假设这个过程需要一定的时间,而在大量用户情况下,当我处理到一半的时候,另外一个新的连接又来了,于是我的这次handler会被打断并保留,栈顶移动开始执行新的handler,而新的handler又被新的连接打断……于是我的第一个handler的可能就会一直在那里等待,用户一直得不到回应。
如果我这种想法是可能出现的,那这样怎样达到高性能呢?是通过可靠的信号语义,在handler返回之前阻塞SIGIO?
以上猜测基于我对事件的理解,我已经隐隐觉得我可能全盘理解错了,希望能得到正确的答案。
假如以LINUX的信号和handler为准,当一个连接的数据传递来了之后,发出SIGIO或者SIGPOLL信号,然后我注册的handler开始执行,进行数据的读,并且处理之后通过socket发送回去。假设这个过程需要一定的时间,而在大量用户情况下,当我处理到一半的时候,另外一个新的连接又来了,于是我的这次handler会被打断并保留,栈顶移动开始执行新的handler,而新的handler又被新的连接打断……于是我的第一个handler的可能就会一直在那里等待,用户一直得不到回应。
如果我这种想法是可能出现的,那这样怎样达到高性能呢?是通过可靠的信号语义,在handler返回之前阻塞SIGIO?
作者: morocco 发布时间: 2010-08-30
把耗时的操作委托出去, 例如web server把http请求的处理和其中的数据库操作委托给php-fastcgi进程.
作者: ideawu 发布时间: 2010-08-30
事件驱动,是单个进程,但是,是不停歇的单个进程,进程不会阻塞在IO上,所以在网就络方面优于多线程。并且nginx的事件驱动,也不是来了一个请求,就中断现在的请求,而是一直处理当前的请求,直到从socket中不能立即读到数据为止。nginx是多进程模式,适应多cpu,每个进程是事件驱动。
如果网络应用,是CPU密集型,比如图片处理,那么nginx没有明显优势。
如果网络应用,是CPU密集型,比如图片处理,那么nginx没有明显优势。
作者: zzyong08 发布时间: 2010-08-30
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28