我已经搜索过了,但找不到以下内容:
进程1通过TCP套接字传输数据。执行传输的代码是(伪代码)
//Section 1
write(sock,data,len);//any language.Just write data
//Section 2
写入之后的process1可以在第2节中继续,但这并不意味着数据已经传输。TCP本来可以缓冲数据以便以后传输。
现在process2与process1同时运行。两个进程都试图同时发送数据。也就是说,两者都将具有上述代码。
问题1:如果两个进程同时向TCP套接字写入数据,那么数据最终将如何通过IP/OS通过有线传输?
a)PROCESS1的所有数据后跟PROCESS2(或相反)的所有数据,即某些FIFO顺序?
或
b)来自process1和process2的数据将由ip层(或os)在线路上复用,并“并发”发送?
问题2:如果我添加了一个延迟,我会确保来自这两个进程的数据是通过线路串行发送的吗(例如,process1的所有数据后跟process2的所有数据)?
更新:
process1和process2不是父子级。他们也在不同的插座上工作
谢谢
最佳答案
答1:订单未指明,至少在我见过的支持OS的套接字上是这样的。进程1和进程2应设计为协作,例如通过共享套接字上的锁/互斥锁。
回答2:如果你的意思只是一个固定的时间延迟,那就不是了。相反,让进程1向进程2发出前进信号,指示进程1已完成发送。使用管道、本地套接字、信号、共享内存或操作系统在进程间通信方面提供的任何内容。只在"flushing" the socket后发送信号(实际上没有刷新)。
关于language-agnostic - 底层传输机制/网络编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4220095/