什么是线程问题?
我们可以讨论设计多线程程序时要考虑的一些问题。这些发布如下-
该fork()和exec()系统调用
将fork()被用来创建一个重复的过程。fork()和exec()系统调用的含义在多线程程序中发生变化。
如果程序中的一个线程调用fork(),新进程是复制所有线程,还是新进程是单线程的?如果我们采用,一些UNIX系统选择了两个版本的fork(),一个复制所有线程,另一个只复制调用fork()系统调用的线程。
如果一个线程调用exec()系统调用,参数中指定的程序exec()将替换包括所有线程在内的整个进程。
信号处理
通常,UNIX系统中使用信号来通知进程发生了特定事件。同步或异步接收的信号,基于发出信号的事件的来源和原因。
所有信号,无论是同步还是异步,都遵循以下相同的模式-
信号是由特定事件的发生产生的。
信号被传递到一个进程。
一旦传递,必须处理信号。
消除
线程取消是在线程完成之前终止线程的任务。
例如-如果多个数据库线程同时搜索数据库并且一个线程返回结果,则剩余的线程可能会被取消。
目标线程是要被取消的线程,目标线程的取消可能发生在两种不同的场景中-
异步取消-一个线程立即终止目标线程。
延迟取消-目标线程定期检查它是否应该终止,允许它有机会以普通方式终止自己。
话题投票
Web服务器中的多线程,每当服务器收到请求时,它都会创建一个单独的线程来为请求提供服务。
创建线程时出现的一些问题如下-
在为请求提供服务之前创建线程所需的时间量以及该线程在完成其工作后将被丢弃的事实。
如果允许所有并发请求在一个新线程中得到服务,则系统中并发活动的线程数没有限制。
无限线程可能会耗尽CPU时间或内存等系统资源。
线程池就是在进程启动时创建多个线程,将它们放入一个池中,坐等工作。