任何人都可以請幫我回答關於epoll_wait的問題。epoll性能
是不是矯枉過正使用調用epoll_wait上設置爲服務於約100K的活動套接字相同FDS多線程?或者僅僅創建一個線程來執行epoll_wait就足夠了?
例如,只有一個套接字準備好讀取數據時,會從epoll_wait中喚醒多少個線程?我的意思是,當有兩個或更多的線程從epoll_wait喚醒但是在結果事件中會有相同的fds時,是否會出現這種情況?
組織服務器中與多個活動客戶端(例如50K +)一起工作的線程的最佳方式是什麼?我認爲最好的方法是:1 I/O工作線程它執行epoll_wait和I/O操作。 + 許多數據處理線程它將處理從I/O工作線程接收到的數據(可能需要很長時間,比如任何遊戲邏輯),併爲I/O工作線程編寫新數據以發送給客戶端。我是否正確地使用這種方法,或者任何人都可以幫助我找出組織這個方法的最佳方法?
在此先感謝,瓦倫丁
因此,如果我理解正確,最好的模式看起來是下一個方法: 創建與系統中的核心數相等的I/O線程數,並使用ET epoll_wait。每個線程都有自己的fd子集。例如IC2Q處理器的4個線程。每個線程處理25K連接,總共100K。 而下一個問題: 我是否需要單獨的線程,將epoll_wait監聽器套接字和管理在哪些子集的新接受的套接字將被添加?並且在一個線程中使用epoll_ctl添加新接受的fd是否是線程安全的,而其他線程是否正在對此子集進行epoll_wait? – Valentin 2010-01-19 09:19:18
實際上,我會等待所有線程中的所有描述符。除非您知道可以通過隔離特定CPU上的相關工作來贏得緩存效果,否則通常會造成這種分區的損失。你最終會餓死一個CPU而另一個仍然有可以完成的工作。是的:epoll操作是原子的(儘管顯然你需要自己鎖定任何自己的bookeeping)。 – 2010-01-19 18:50:51
ET epoll_wait將如何表現?所有線程是否會從epoll_wait喚醒?或者只有一個線程?如果我理解正確,ET epoll_wait是原子的,並且對於現成的fd只會發生一次。例如:我有2個fds和2個等待epoll_wait的線程。 1 fd準備就緒,只有1個線程會恢復,如果其他fd在第一個線程處理完第一個fd,第二個線程將恢復。安迪,這是正確的嗎? – Valentin 2010-01-21 09:27:46