Linux debian 64。 我自学了插座的工作方式,非常有趣。 单线程应用程序。
我不清楚是否存在异步/非阻塞问题。套接字设置为 fcntl(s,F_SETFL,O_NONBLOCK);
1)如果两个连接在一个套接字上同时到达,会发生什么?
当套接字无阻塞时,运行套接字的代码(称之为接收)是否会读取数据并并行地或按顺序执行其他内容? (单线程应用程序)
我的意思是,对于非阻塞套接字,传入请求是按顺序处理但非常快(非阻塞操作,因此只有网络成为瓶颈而不是cpu)或并行处理?
我问,因为我想在脚本中维护一个堆栈数组,并且在将数据推入其中时无法承受竞争条件。
提前致谢
答案 0 :(得分:2)
“阻止”是一个非常具体的术语,它与操作系统的调度程序有关:如果用户空间调用阻止,则操作系统会调度正在进行调用的进程(或线程)。如果操作是非阻塞,这意味着如果操作无法成功,它将不会自动且自愿地导致进程进入休眠状态,而是立即返回调用状态,指示存在没什么可做的。 (当然,你的过程仍然可以通过先发制人的强制推卸,但这是一个单独的问题。)