论事件驱动与异步IO
Posted 娄先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论事件驱动与异步IO相关的知识,希望对你有一定的参考价值。
通常我们写服务器模型,有以下几种模型:
- 每收到一个请求,创建一个新的进程,来处理该请求
- 每收到一个请求,创建一个新的线程,来处理该请求
- 每收到一个请求,放入到一个事件中,让主程序通过非阻塞I/0方式来处理请求
以上几种方式,各有千秋:
第1种方式,由于创建新的进程开销比较大,所以会导致服务器性能比较低,但实现比较简单
第2种方式,由于要涉及到线程的同步,有可能会面临死锁等问题
第3种方式,在写应用程序代码时,逻辑比前面两种都复杂。
综合考虑因素,一般普遍认为第三种是大多数网络服务器采用的方式。
一、概念问题
- 用户空间和内核空间
- 进程切换
- 进程的阻塞
- 文件描述符
- 缓存 I/O
1.1 用户空间和内核空间
现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。
1.2
以上是关于论事件驱动与异步IO的主要内容,如果未能解决你的问题,请参考以下文章
python下:事件驱动与 阻塞IO非阻塞IOIO多路复用异步IO
# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # SelectPollEpoll异步IO 以及selectors模块 # (示