藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


信號量的限制

我想創建一個SHM,記錄各個子進程信息的數據,每個單元用SEMPHORE保護原子性,可是有個問題,信號量的限制如何查看(SOLARIS下),我只創建了32個就提示空間不夠了,這樣的話難道這種應用不可行?

信號量的限制

太浪費了吧
使用一個不就可以嗎

我覺得你的算法有問題
另外使用ulimit命令看看當前你的信號量限制是多少

信號量的限制

用一個我怎麼使得單獨的每個進程對應的記錄塊的讀寫原子性呢

信號量的限制

這時候恐怕應該使用消息.shm+sem繞遠了.

信號量的限制

不用分那麼細
要鎖只是針對全部數據右鎖這樣會更好

因為不會很浪費系統資源

信號量的限制

我的子進程可能有幾百個,這樣的話鎖得太多了,會影響效率的吧

信號量的限制

但是如果使用消息的話
取了消息後消息會被刪除
如果不想保存消息那可以

使用大量的信號量會影響系統性能
因為系統資源是固定的
如果所有的信號資源都被你使用
那麼其它進程就沒法用了

優化一下自己的設計吧

信號量的限制

信號量的限制

可以通過修改/etc/system來限制。

不過你的一個信號集,可以有多個信號燈呀。redhat缺省是250
http://www-900.ibm.com/developerWorks/cn/linux/l-ipc/part4/index.shtml
-->

solaris可以參看
http://www.china-pub.com/computers/emook/0717/info.htm
-->

信號量的限制

我的子進程可能有幾百個,這樣的話鎖得太多了,會影響效率的吧


你的程序設計有這個必要嗎?子進程可能有幾百個?是不是通訊的方面的,我覺得你的設計有問題,這麼多的子進程,好耗系統資源的。

信號量的限制

我查了下,SOLARIS下SEMMSL=25,每個SEM集合只有這麼點SEMPHORE,我不想修改內核參數(沒有幾個軟件要用戶修改KENEL的),看來我先用一個信號燈再測試下效率了
TO 大菠蘿:
我就是在模擬APACHE做進程池啊

信號量的限制

線程池,只要一個隊列+一個信號量+幾個在池中等待中的線程(建議數量是2*CPU數量+2,多了不行的),就可以了,你的線程池設計是什麼樣的??

信號量的限制

http://www.lslnet.com/linux/forum/viewtopic.php?t=74839&highlight=chdonald

信號量的限制

我沒有在Unix上做過,我只是在Windows 上做過一個線程池,大概的思想是:
一個主線程在port上進行listen,當有用戶請求來到時,將用戶請求放入一個隊列中,且將信號量+1,然後返回,這個時候信號量激發在線程池中的一個線程(隨機的一個,在開始的時候,線程池中將啟動2*CPUnumber+2個,waitforobject(semphone),(在Unix中,對應的函數),去從隊列中去取一個用戶請求(在這裡當加上metex,可能在一個時間段有幾個線程去取),進行處理,然後在回到線程池中wait,它是一個
for(;;;)
wait
不會quit的,如果quit了,就不叫線程池了,效率不高,不是線程都,效率就高,恰恰相反。
http://www.www.lslnet.com/linux/forum/viewtopic.php?t=97250
我貼了一個的,不知道Unix上,當有什麼不同,我想大概的思想當是樣的吧。

信號量的限制

在STEVENS的UNIX網絡編程中有線程池的例子

另外使用信號可能是慢的原因
我覺得可以使用條件變量的方法等待
(unix下是pthread_cond_t,windows下應該是CreateEvent)

設計好後性能還可以再提高的



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com