我听说在linux下的多核服务器上,当你只有一个进程但是multithreading时,不可能达到最高性能,因为Linux对IO有一些限制,所以在8核心服务器上有8个线程的进程可能是比8个进程慢。
任何意见? 还有其他的限制,可能会减慢应用程序? 这些应用程序是一个networkingC ++应用程序,服务于100多个客户端,有一些磁盘IO。
更新:我担心除了我自己实现的锁之外,还有一些与IO相关的问题…在几个线程中执行simultanIoUsnetworking/磁盘IO没有任何问题吗?
与/ dev / mem不一致的python mmap行为
无法编辑我拥有写入权限的只读文件,也无法更改其权限; 如何重新安装其父文件夹?
P4API.cpp:39:20:致命错误:Python.h:没有这样的文件或目录
解包RPM文件并重新打包
AttributeError:'module'对象没有属性python
nohup已经运行的进程通过PID(类似于AIX nohup -p)
有没有人使用netlink的IPC?
用sudo安装RVM时出错。 如何反向?
Linux如何处理线程和进程调度
线程的缺点
主题:
序列化内存操作。 这就是内核,MMU又必须服务诸如执行页面分配的mmap()操作。
共享相同的文件描述符表。 有锁定涉及在这个表中进行更改和执行查找,它存储像文件偏移和其他标志的东西。 每一个使用这个表的系统调用,例如open() , accept() , fcntl()必须锁定它以将fd转换为内部文件句柄,以及何时进行更改。
分享一些调度属性。 不断对流程进行评估,以确定他们加载到系统上的负载,并相应地进行安排。 线程数量多意味着调度程序通常不喜欢的cpu负载较高,并且会增加该进程事件的响应时间(例如读取套接字上的传入数据)。
可能共享一些可写的内存。 任何由多个线程写入的内存(如果需要高级锁定的话,速度特别慢)会产生各种缓存争用和转移问题。 例如, malloc()和free()等堆操作在全局数据结构上运行(可以在一定程度上解决)。 还有其他的全球结构。
共享凭据,这可能是服务类型进程的一个问题。
共享信号处理,这些将在处理它们时中断整个过程。
进程或线程?
如果你想使调试更容易,使用线程。
如果你在Windows上,使用线程。 (进程在Windows中是非常重量级的)。
如果稳定性是一个巨大的问题,尝试使用进程。 (只需一个SIGSEGV/PIPE …)。
如果线程不可用,请使用进程。 (现在不太常见,但确实发生过)。
如果您的线程共享不能在多个进程中使用的资源,请使用线程。 (或者提供一个IPC机制来允许与资源的“所有者”线程进行通信)。
如果您使用的资源只能以一个进程为基础(每个进程只有一个进程),那么显然使用进程。
如果你的处理上下文没有任何共享(比如一个套接字服务器产生和忘记连接),而cpu是一个瓶颈,使用进程和单线程运行时(没有任何强烈的锁定如在堆和其他地方)。
线程和进程之间最大的区别之一是:线程使用软件构造来保护数据结构,进程使用硬件(速度明显更快)。
链接
并行线程(7)
关于进程和线程(MSDN)
线程与进程
它确实应该没有区别,但可能是关于设计。
多进程的应用程序可能不得不做更少的锁定,但可能会使用更多的内存。 在进程之间共享数据可能会更困难。
另一方面多进程可以更强大。 您可以调用exit()并最终安全地退出,而不会影响其他人。
这取决于客户的依赖程度。 我通常推荐最简单的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。