+ -
当前位置:首页 → 问答吧 → 问个关于服务器采用事件驱动还是多线程的问题

问个关于服务器采用事件驱动还是多线程的问题

时间:2010-08-30

来源:互联网

看到说Ngix是基于事件驱动的服务器,性能很好。我就有个疑问,事件驱动不是单线执行的吗?怎么可能获得很好的性能?


以上猜测基于我对事件的理解,我已经隐隐觉得我可能全盘理解错了,希望能得到正确的答案。


假如以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没有明显优势。

作者: zzyong08   发布时间: 2010-08-30

相关阅读 更多

热门下载

更多