并发编程主要基于以下几种:
1、多进程并发,依赖于fork类模式的并发,典型的服务器模型就是一个client的confd会fork一个进程去处理。当然了,进程使用的好坏很明显,不赘述。
2、多路复用IO模式。基于select、poll、epoll等基础库提供的,基于io驱动模式,通过阻塞式监听IO状态,再根据返回可用的IO描述符,来进行相应的逻辑处理。这种往往是单线程,多核CPU无法利用。除非结合1的模式,开多个进程,这里排除这种。
3、基于多线程的并发,Unix系列下主要是posix类线程,线程与进程的概念这里不赘述,但有点需要知道的是,线程是共享进程的地址空间的,也就意味着可以共享某些资源,这为线程并发提供了某些优势,但也带来了一些劣势,比如并发锁、资源竞争等关系,基于线程的并发开发要考虑的东西。典型的应用,是基于生产者--开发者模式的并发模型。假设有一个poll或者buff,生产者往这个buff或者poll里面丢任务,然后再主线程下开启多个对等线程,去这个buff或者poll里面抓取任务并处理。只不过要记得控制这个buff或者poll的资源同步,通常是用信号量。还有一点是记得用线程分离来处理资源回收。否则高并发下资源不够用。