Boost.Asio的多线程模型是如何构建一个长尾词的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1408个文字,预计阅读时间需要6分钟。
Boost.Asio支持两种多线程方式,第一种比较简单:在多线程环境下,每个线程都拥有一个io_service实例,并调用各自的run()方法。
Boost.Asio 有两种支持多线程的方式,第一种方式比较简单:在多线程的场景下,每个线程都持有一个io_service,并且每个线程都调用各自的io_service的run()方法。
另一种支持多线程的方式:全局只分配一个io_service,并且让这个io_service在多个线程之间共享,每个线程都调用全局的io_service的run()方法。
每个线程一个 I/O Service
让我们先分析第一种方案:在多线程的场景下,每个线程都持有一个io_service (通常的做法是,让线程数和 CPU 核心数保持一致)。那么这种方案有什么特点呢?
1 在多核的机器上,这种方案可以充分利用多个 CPU 核心。
2 某个 socket 描述符并不会在多个线程之间共享,所以不需要引入同步机制。
3 在 event handler 中不能执行阻塞的操作,否则将会阻塞掉io_service所在的线程。
本文共计1408个文字,预计阅读时间需要6分钟。
Boost.Asio支持两种多线程方式,第一种比较简单:在多线程环境下,每个线程都拥有一个io_service实例,并调用各自的run()方法。
Boost.Asio 有两种支持多线程的方式,第一种方式比较简单:在多线程的场景下,每个线程都持有一个io_service,并且每个线程都调用各自的io_service的run()方法。
另一种支持多线程的方式:全局只分配一个io_service,并且让这个io_service在多个线程之间共享,每个线程都调用全局的io_service的run()方法。
每个线程一个 I/O Service
让我们先分析第一种方案:在多线程的场景下,每个线程都持有一个io_service (通常的做法是,让线程数和 CPU 核心数保持一致)。那么这种方案有什么特点呢?
1 在多核的机器上,这种方案可以充分利用多个 CPU 核心。
2 某个 socket 描述符并不会在多个线程之间共享,所以不需要引入同步机制。
3 在 event handler 中不能执行阻塞的操作,否则将会阻塞掉io_service所在的线程。

