像網路爬蟲、資料庫等方面多線程程序如何設置線程數?
12-28
公司有一套爬蟲系統,用特定關鍵字在搜索引擎上搜索(如Google,百度),流程大致上,從資料庫批量取出關鍵字,然後生成相關搜索引擎的搜索任務,扔到Queue裡面,後面一群消費者去爬。
多線程的,我想知道如何去設置合理的線程數?
PS:像資料庫有最大連接數控制,所以並發數還好控制。沒有這種限制,我就不會從IO、CPU方面分析了。
公司技術諮詢按小時收費。
爬蟲這種IO密集型,而且是對外網的請求,如果需求的QPS 超過500/s,就用erlang,golang或者其他語言的epoll庫。否則就啟N個consumer線程處理就好了。爬百度的數據,一個機器的ip肯定是不夠的,先從淘寶上買一堆的http代理肉雞ip回來再搞。
你這個需求,處理好http代理的問題(設置每個ip的使用間隔放置被ban),
io方面如果超過500的QPS需求,利用erlang actor 是比較好的選擇,如果怕學習成本,可以使用其他語言(java 的nio, c++的libevent的http模塊,或者各個語言的epoll封裝) 都可以很好的解決。如果QPS比較低,可以開N個線程或者線程池處理,注意線程數不要大於( ulimit -u)
推薦閱讀:
※UDP socket能否被多線程同時調用sendto來發送數據?
※Linux 開發,使用多線程還是用 IO 復用 select/epoll?
※如何修改shared_ptr智能指針,讓他支持多線程?
※開發多線程的程序應該注意哪些問題?