簡體   English   中英

非阻塞寫入和阻塞接收

[英]Non Blocking write, and blocking recv

我正在嘗試為我的C代理編寫並行流,其中將數據同時寫入並行日志,同時將其轉發到目標服務器。 本質上,我正在尋找2個線程,其中:

  1. 線程對緩沖區執行非阻塞寫入
  2. 第二線程執行從緩沖區的阻塞讀取。

自然,寫程序線程可以超過讀程序線程。 因此,每當確實發生緩沖區溢出時,我們都會將其引發並標記為錯誤。

假設線程1(編寫者)的速度是線程2(讀者)的5倍。 我希望線程1不會減慢速度,並以讀取器速度的5倍進行寫入(即緩沖區不應被讀取器等鎖住)。 這顯然會導致緩沖區溢出,因為線程1的寫入速度快於線程2的讀取速度(我也想捕獲緩沖區溢出)

我的理解是套接字/文件描述符要么是阻塞的,要么是非阻塞的,不能將寫操作作為非阻塞,而不能將讀取作為阻塞。 我猜這是為了避免緩沖區溢出。 但是,緩沖區溢出我很好。

任何人都可以幫助設計如何在生產者非阻塞而接收者阻塞的情況下創建此類並行線程嗎?

您可以使用select()進行阻塞,直到套接字可讀為止。 使其處於非阻塞模式。 如果send()返回-1errno設置為EAGAINEWOULDBLOCK則您將需要使用select()來告訴您套接字何時再次變為可寫狀態 僅當send()報告EAGAIN / EWOULDBLOCK時才這樣做,因為套接字幾乎總是可寫的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM