论事件驱动与异步IO

Posted 娄先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论事件驱动与异步IO相关的知识,希望对你有一定的参考价值。

 通常我们写服务器模型,有以下几种模型:

  1. 每收到一个请求,创建一个新的进程,来处理该请求
  2. 每收到一个请求,创建一个新的线程,来处理该请求
  3. 每收到一个请求,放入到一个事件中,让主程序通过非阻塞I/0方式来处理请求

以上几种方式,各有千秋:

  第1种方式,由于创建新的进程开销比较大,所以会导致服务器性能比较低,但实现比较简单

  第2种方式,由于要涉及到线程的同步,有可能会面临死锁等问题

  第3种方式,在写应用程序代码时,逻辑比前面两种都复杂。

综合考虑因素,一般普遍认为第三种是大多数网络服务器采用的方式。

一、概念问题

  - 用户空间和内核空间
  - 进程切换
  - 进程的阻塞
  - 文件描述符
  - 缓存 I/O

1.1 用户空间和内核空间 

现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。

1.2

 

 

 

 

 

  

以上是关于论事件驱动与异步IO的主要内容,如果未能解决你的问题,请参考以下文章

论事件驱动与多路IO复用

事件驱动与异步IO使用

python下:事件驱动与 阻塞IO非阻塞IOIO多路复用异步IO

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # SelectPollEpoll异步IO 以及selectors模块 # (示

Python 协程/异步IO/SelectPollEpoll异步IO与事件驱动

linux五种IO模型与事件驱动模型