8
|
devoured elysium · 技术社区 · 14 年前 |
![]() |
1
9
在之后的子进程中调用什么是安全的有很多限制
Unix系统
作为一个应用实例
如果您想创建一个新的线程,您应该使用POSIX线程库。使用创建新的posix线程(pthread)
在线程可用之前,
以下:限制是因为
因为您调用的任何库函数都可能代表您生成了一个线程,偏执的假设是,在调用之间,您总是被限制在子进程中执行异步信号安全操作
|
![]() |
2
8
撇开历史不谈,在资源所有权和进程和线程之间的生命周期方面存在一些根本性的差异。 当您分叉时,新进程将占用一个完全独立的内存空间。这是创建新线程的一个非常重要的区别。在多线程应用程序中,必须考虑如何访问和操作共享资源。已分叉的处理必须使用进程间方法(如共享内存、管道、远程过程调用、信号量等)显式共享资源。 另一个区别是fork()的子级可以比其父级长,当进程终止时,所有线程都会死亡。 在一个客户机-服务器体系结构中,使用fork()而不是创建线程是一个有效的策略来防止内存泄漏,在这种体系结构中,运行时间很长。与其担心清理线程中的内存泄漏,不如派生一个新的子进程来处理每个客户机请求,然后在完成后杀死该子进程。然后,内存泄漏的唯一来源将是发送事件的父进程。 一个类比:可以将生成线程看作是在单个浏览器窗口中打开选项卡,而分叉就像打开单独的浏览器窗口。 |
![]() |
3
6
问为什么更为合理
你对迈克的评论是 “我不明白你想在什么环境下使用它。” . 基本上,当你想:
btw/使用unix/linux并不意味着您必须放弃线程
|
![]() |
4
2
让生成进程和线程之间的区别留一秒钟:基本上,fork()是一个更基本的原语。虽然spawnewthread必须做一些后台工作才能使程序计数器处于正确的位置,但是fork不做这种工作,它只复制(或实际上复制)您的程序内存并继续计数器。 |
![]() |
5
2
福克和我们在一起已经很久了。在“启动一个线程运行一个特定的函数”的想法出现之前,fork被认为是任何人眼中的闪光。
人们不使用
你可以考虑研究关于这个问题的早期论文。 |
![]() |
6
1
值得注意的是,多重- 处理 和multi不完全一样- 穿线 . fork创建的新进程与旧进程共享的上下文很少,这与线程的情况有很大的不同。
那么,让我们来看看Unixy
线
系统:
或者,为了扭转它,让我们看看Windows(或者Java或其他线程生存的系统)产生一个与当前运行的进程相同的方法(这是什么)
|
![]() |
7
1
你
例如,这里有一个类似telnetish的程序:
看看这有多简单? |
![]() |
8
0
fork()最常用的用途是为连接()s的每个新客户机克隆服务器(因为新进程继承了所有文件描述符,不管它们的状态如何)。 但我还使用它从客户机启动了一个新的(本地运行的)按需服务。 该方案最好使用两个fork()调用来完成——一个在父会话中,直到服务器启动并运行并且能够连接,另一个(我将它从子会话中拨出)成为服务器并离开父会话,这样就不能再通过sigquit(例如)访问它。 |
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 6 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 6 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 6 月前 |
![]() |
András Takács · Python多线程问题 10 月前 |
|
András Takács · Python多线程错误 10 月前 |