shu*_*ero 4 c++ multithreading
我想用C++构建一个可移植且高效的服务器; 它将有许多客户端同时尝试连接,因此它必须能够并行处理每个请求.
我一直在努力寻找多线程的文档,指南等.我发现了很多关于POSIX Pthread的内容,但对于GNU Pth几乎没有(除了gnu.org中的官方手册).
那么,有人能解释一下POSIX Pthread和GNU Pth之间的区别吗?请,我希望回复不是维基百科内容的副本(请记住,我是多线程的绝对新手).我希望我的服务器在所有基于*nix的系统之间可移植和高效,远离使用繁重的fork().
谢谢你的帮助.
PS:我认为最好在这里问一下:Windows怎么样?Pthreads或Pth是选项吗?如果没有,该操作系统的API是什么?
使用P线程,它的很多更广泛的应用,所以有更多的信息,并为它提供支持.我从来没有见过任何真正使用过GNU Pth的人.或者更好的是,如果你使用的是C++ 11 std::thread,那么使用它boost::thread.
那么,有人能解释一下POSIX Pthread和GNU Pth之间的区别吗?
Pthreads是一个用于可抢占多线程的跨平台标准,意味着(通常)OS内核管理线程,OS调度程序决定每个线程何时运行(如果你有一个核心,一次只能运行一个线程,如果你有多个核心,一次可以运行多个线程).OS调度程序可以在(几乎)任何时候暂停任何线程并让另一个线程运行,因此每个线程获得有限的"时间片",然后其他线程就可以运行.
GNU Pth是一个不可抢占的用户空间线程库,这意味着线程和在哪个时间运行的线程在用户空间而不是内核中决定.有些人说使用不可抢占的线程库的程序更容易理解,因为你的线程不会在任意时间暂停,以便另一个线程运行.
我希望我的服务器在所有基于*nix的系统之间可移植和高效,远离使用繁重的fork().
fork 在UNIX上并不重要.
W*ndows怎么样?Pthreads或Pth是选项吗?如果没有,该操作系统的API是什么?
有适用于Windows的pthreads API,但它们不是Windows操作系统的原生API.我不知道GNU Pth是否适用于Windows - 我对此表示怀疑,除非您使用Cygwin.Windows有自己的Win32线程模型.
使用std::thread或boost::thread可移植到POSIX平台和Windows,并使API的某些部分更易于使用(具体而言,锁定和解锁互斥锁可以以异常安全的方式轻松完成,条件变量更易于使用.)
| 归档时间: |
|
| 查看次数: |
3753 次 |
| 最近记录: |