Discussion:
[問題]JAVA有類似C的shared memory的功能嗎
(时间太久无法回复)
是我不夠好嗎??
2006-11-16 20:31:31 UTC
Permalink
程式執行環境: linux
在socket網路程式中,
一般C的做法是clinet連到server後 ,會fork一個prosecc處理該client input的訊息,
遇到兩個process彼此要相互存取彼此的資訊時 ,
在C程式中有shared memory這種功能 ,
可讓目前連到server上的數個client彼此傳送一些訊息或是資料,
不知道JAVA有沒有類似shared memory的功能可以做到呢?

另外想請問 , 如果不用socket和serversocket的做法,
而用JAVA NIO 的SocketChannel和ServerSocketChannel的方式,
server端要如何知道現在連上來的client有哪些呢?

我想利用迴圈的方式,對所有連上來的client做廣播訊息的動作,
或是用迴圈找出某一特定的client,並用SocketChannel.write傳送資料,
我是用selector監聽client端的連線情形,
目前server和client端連線已經完成了, echo給client也沒問題.
不過我希望把echo 改成廣播給所有連線的client,
不知道大家看的懂我的問題嗎? Thx.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.126.122.229
痞子軍團團長
2006-11-16 21:15:27 UTC
Permalink
對一些高級領域的東西不熟
也不敢保證那些跟你要的東西有關 Orz (JMS?)
不過,下面是針對實做部份的回答?

※ 引述《Tessa (是我不夠好嗎??)》之銘言:
: 程式執行環境: linux
: 在socket網路程式中,
: 一般C的做法是clinet連到server後 ,會fork一個prosecc處理該client input的訊息,
: 遇到兩個process彼此要相互存取彼此的資訊時 ,
: 在C程式中有shared memory這種功能 ,
: 可讓目前連到server上的數個client彼此傳送一些訊息或是資料,
: 不知道JAVA有沒有類似shared memory的功能可以做到呢?

[廣告語氣] 你可以不用 process 的 [/廣告語氣]

改成用 thread 去處理一個新的 client 就好了
(一般的書都是這樣子教的阿....)
這樣子你可以完全在自己的程式內部維護所有的狀態
而下面的問題也不會是問題了(nio 跟 io 處理方法乾有差??)

: 另外想請問 , 如果不用socket和serversocket的做法,
: 而用JAVA NIO 的SocketChannel和ServerSocketChannel的方式,
: server端要如何知道現在連上來的client有哪些呢?
: 我想利用迴圈的方式,對所有連上來的client做廣播訊息的動作,
: 或是用迴圈找出某一特定的client,並用SocketChannel.write傳送資料,
: 我是用selector監聽client端的連線情形,
: 目前server和client端連線已經完成了, echo給client也沒問題.
: 不過我希望把echo 改成廣播給所有連線的client,
: 不知道大家看的懂我的問題嗎? Thx.

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.199.201
Terry
2006-11-17 10:13:59 UTC
Permalink
※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: ※ 引述《***@ptt.cc (痞子軍團團長)》之銘言:
: > 對一些高級領域的東西不熟
: > 也不敢保證那些跟你要的東西有關 Orz (JMS?)
: > 不過,下面是針對實做部份的回答?
: > [廣告語氣] 你可以不用 process 的 [/廣告語氣]
: > 改成用 thread 去處理一個新的 client 就好了
: > (一般的書都是這樣子教的阿....)
: > 這樣子你可以完全在自己的程式內部維護所有的狀態
: > 而下面的問題也不會是問題了(nio 跟 io 處理方法乾有差??)
: a client, a thread是蠻浪費的。
: 如果thread切換的頻率不高,client也不多倒是可以考慮。
: 不然時間都花在context-switch上面了。
不然可行性是如何做呢? 不a client , a thread 哦, 怕時間都花在context-switch上面

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.150.73
痞子軍團團長
2006-11-17 10:15:11 UTC
Permalink
※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: ※ 引述《***@ptt.cc (痞子軍團團長)》之銘言:
: > 對一些高級領域的東西不熟
: > 也不敢保證那些跟你要的東西有關 Orz (JMS?)
: > 不過,下面是針對實做部份的回答?
: > [廣告語氣] 你可以不用 process 的 [/廣告語氣]
: > 改成用 thread 去處理一個新的 client 就好了
: > (一般的書都是這樣子教的阿....)
: > 這樣子你可以完全在自己的程式內部維護所有的狀態
: > 而下面的問題也不會是問題了(nio 跟 io 處理方法乾有差??)
: a client, a thread是蠻浪費的。
: 如果thread切換的頻率不高,client也不多倒是可以考慮。
: 不然時間都花在context-switch上面了。

囧?

這樣子跟你上一篇講的好像... 恩?

我換個問法好了... 有可能不用一個 client 一個 thread 嗎?

上一篇提到良葛格的那個程式也是一個 client 一個 thread(應該沒看錯)
我是對 java.net 跟 java.nio 不熟
(路人:簡言之就是這傢伙除了嘴砲之外,沒有東西是熟的)
但是想不出來如何不這麼作....

請 q 大師點解...

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.199.201
Bird
2006-11-17 20:43:23 UTC
Permalink
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: : a client, a thread是蠻浪費的。
: : 如果thread切換的頻率不高,client也不多倒是可以考慮。
: : 不然時間都花在context-switch上面了。
: 囧?
: 這樣子跟你上一篇講的好像... 恩?
: 我換個問法好了... 有可能不用一個 client 一個 thread 嗎?
: 上一篇提到良葛格的那個程式也是一個 client 一個 thread(應該沒看錯)
: 我是對 java.net 跟 java.nio 不熟
: (路人:簡言之就是這傢伙除了嘴砲之外,沒有東西是熟的)
: 但是想不出來如何不這麼作....
: 請 q 大師點解...

java.nio.Selector吧..

用法應該和linux下的select(), winapi的WSASelect()差不多
就non-blocking IO的觀念

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.88.16
!H45
2006-11-17 21:09:59 UTC
Permalink
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: : a client, a thread是蠻浪費的。
: : 如果thread切換的頻率不高,client也不多倒是可以考慮。
: : 不然時間都花在context-switch上面了。
: 囧?
: 這樣子跟你上一篇講的好像... 恩?
: 我換個問法好了... 有可能不用一個 client 一個 thread 嗎?
: 上一篇提到良葛格的那個程式也是一個 client 一個 thread(應該沒看錯)
: 我是對 java.net 跟 java.nio 不熟
: (路人:簡言之就是這傢伙除了嘴砲之外,沒有東西是熟的)
: 但是想不出來如何不這麼作....
: 請 q 大師點解...

MultiThread 的 Worker Pattern 吧

http://www.java2s.com/Code/Java/Design-Pattern/WorkerThreadPatterninJava.htm

也就是少數幾個 thread, 處理很多個 Client

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
Terry
2006-11-17 23:24:02 UTC
Permalink
※ 引述《H45 (!H45)》之銘言:
: ※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: : 囧?
: : 這樣子跟你上一篇講的好像... 恩?
: : 我換個問法好了... 有可能不用一個 client 一個 thread 嗎?
: : 上一篇提到良葛格的那個程式也是一個 client 一個 thread(應該沒看錯)
: : 我是對 java.net 跟 java.nio 不熟
: : (路人:簡言之就是這傢伙除了嘴砲之外,沒有東西是熟的)
: : 但是想不出來如何不這麼作....
: : 請 q 大師點解...
: MultiThread 的 Worker Pattern 吧
: http://www.java2s.com/Code/Java/Design-Pattern/WorkerThreadPatterninJava.htm
: 也就是少數幾個 thread, 處理很多個 Client
請好好的解讀一下它在寫什麼, 有什麼情形可以這樣做, 什麼情形
不能這樣做. 不要只丟出一個code, 就當作是哪麼一回事.
簡單的講, 如果一個thread 要做的事就像該example 哪麼簡單,
還需要你來寫程式嗎?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.163.58
痞子軍團團長
2006-11-17 23:35:17 UTC
Permalink
※ 引述《Lordaeron (Terry)》之銘言:
: ※ 引述《H45 (!H45)》之銘言:
: : MultiThread 的 Worker Pattern 吧
: : http://www.java2s.com/Code/Java/Design-Pattern/WorkerThreadPatterninJava.htm
: : 也就是少數幾個 thread, 處理很多個 Client
: 請好好的解讀一下它在寫什麼, 有什麼情形可以這樣做, 什麼情形
: 不能這樣做. 不要只丟出一個code, 就當作是哪麼一回事.
: 簡單的講, 如果一個thread 要做的事就像該example 哪麼簡單,
: 還需要你來寫程式嗎?

ㄟ... 請這位 Lordaeron 版友不要這麼激動

從那個 Cobol 轉 Java 的文章開始
您的文章都太言簡意賅了,像我這種程度的人其實看不太懂
(路人:像你程度這麼低的,應該也沒多少吧... [毆飛])

如果您不介意的話,可以麻煩幫程度低的眾人們導讀一下該篇 link
(好啦好啦... 我承認是我想看... T__T)

反過來說...
也請您不要只丟出一篇回文、純粹寥寥數句否定的文句
就要求大家以正視聽(根本連錯在哪裡都不還不知道咧)
不然,還需要討論區這種東西嗎? 只要看談話性節目就夠了 :)

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.199.201
Terry
2006-11-18 04:00:21 UTC
Permalink
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《Lordaeron (Terry)》之銘言:
: : 請好好的解讀一下它在寫什麼, 有什麼情形可以這樣做, 什麼情形
: : 不能這樣做. 不要只丟出一個code, 就當作是哪麼一回事.
: : 簡單的講, 如果一個thread 要做的事就像該example 哪麼簡單,
: : 還需要你來寫程式嗎?
: ㄟ... 請這位 Lordaeron 版友不要這麼激動
: 從那個 Cobol 轉 Java 的文章開始
: 您的文章都太言簡意賅了,像我這種程度的人其實看不太懂
: (路人:像你程度這麼低的,應該也沒多少吧... [毆飛])
: 如果您不介意的話,可以麻煩幫程度低的眾人們導讀一下該篇 link
: (好啦好啦... 我承認是我想看... T__T)
: 反過來說...
: 也請您不要只丟出一篇回文、純粹寥寥數句否定的文句
: 就要求大家以正視聽(根本連錯在哪裡都不還不知道咧)
: 不然,還需要討論區這種東西嗎? 只要看談話性節目就夠了 :)
簡單的講, thread pool 要不要用, 和你會不會同時產生大量的thread 沒有關係
thread pool 只能幫你減少thread create 的時間, 但當你需要大量的
thread 時, context switch 一樣是需要的.
舉個簡單的例子, 以前AOL網站, 它們統計, 最高每秒要處理2800 個連線.
哪請問, 這一秒內, 你要有2000 個以上的threads 在work 嗎?
如果答案是要的話, 哪麼context switch 的cost 就很高了.
所以才會出現load balance, 來解決這種問題, 而不是留一個thread pool 就當作
解答. 要是thread 要做的事就像該example 哪麼簡單,還需要你來寫程式嗎?
code generator 就搞定了.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.163.58
Terry
2006-11-18 17:56:59 UTC
Permalink
※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: ※ 引述《***@ptt.cc (Terry)》之銘言:
: > 請好好的解讀一下它在寫什麼, 有什麼情形可以這樣做, 什麼情形
: > 不能這樣做. 不要只丟出一個code, 就當作是哪麼一回事.
: > 簡單的講, 如果一個thread 要做的事就像該example 哪麼簡單,
: > 還需要你來寫程式嗎?
: Lordaeron,
: H45只是提供可行的一種方向,為何要如此嚴厲地批評呢?
: 多認識一些方法,在面對問題時有更多的選擇是件好事啊!
: 何況我們眾人回答問題時心中所設想與能體會到的情況實在很難比較
: 以自身的理解去攻詰對方的觀點,似乎有所不妥
有何不妥?
當你高調提出你的方法時.
1. 是否有想過合符實際狀況否?
2. 是否合符問題?
就以你的大作, 丟出一句, 不要有太多的threads, 不然context switch
會consume 掉太多的時間.
就這句話本身來講, 有沒有考慮到實際狀?
再來, H45 丟出你所胃的方向, thread pool, 是否有解決你的問題?
thread pool 是用來解決context switch 太頻繁的問題的嗎? 如果不是的話
, 哪麼它連方向都沒有.
最後, 還是請你來解答你的大作吧, 我洗耳恭聽.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.157.51
愚人
2006-11-18 18:17:49 UTC
Permalink
※ 引述《Lordaeron (Terry)》之銘言:
: 有何不妥?
: 當你高調提出你的方法時.
: 1. 是否有想過合符實際狀況否?
: 2. 是否合符問題?
: 就以你的大作, 丟出一句, 不要有太多的threads, 不然context switch
: 會consume 掉太多的時間.
: 就這句話本身來講, 有沒有考慮到實際狀?
: 再來, H45 丟出你所胃的方向, thread pool, 是否有解決你的問題?
: thread pool 是用來解決context switch 太頻繁的問題的嗎? 如果不是的話
: , 哪麼它連方向都沒有.
: 最後, 還是請你來解答你的大作吧, 我洗耳恭聽.

<%
a client, a thread是蠻浪費的。

如果thread切換的頻率不高,client也不多倒是可以考慮。

不然時間都花在context-switch上面了。
%>

並非只有一句啊,俺並沒有什麼大作 :p

也不會再回應此主題。

想和版友分享點什麼的心情,一點一點被磨滅了。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.59.94.161
痞子軍團團長
2006-11-18 22:13:06 UTC
Permalink
※ 引述《qrtt1 (愚人)》之銘言:
: ※ 引述《Lordaeron (Terry)》之銘言:
: : 有何不妥?
: : 當你高調提出你的方法時.
: : 1. 是否有想過合符實際狀況否?
: : 2. 是否合符問題?
: : 就以你的大作, 丟出一句, 不要有太多的threads, 不然context switch
: : 會consume 掉太多的時間.
: : 就這句話本身來講, 有沒有考慮到實際狀?
: : 再來, H45 丟出你所胃的方向, thread pool, 是否有解決你的問題?
: : thread pool 是用來解決context switch 太頻繁的問題的嗎? 如果不是的話
: : , 哪麼它連方向都沒有.
: : 最後, 還是請你來解答你的大作吧, 我洗耳恭聽.

qrtt1 在第一篇提供的 onjava 連結
不過,說實在的,那篇之前要寫 nio 的時候就看過了
實在還是看不懂....
是不是真的用一個 thread 解決... ㄟ...
麻煩眾家高手解惑(當事人 qrtt1 已經說他不回應了 [聳肩])


: <%
: a client, a thread是蠻浪費的。
: 如果thread切換的頻率不高,client也不多倒是可以考慮。
: 不然時間都花在context-switch上面了。
: %>
: 並非只有一句啊,俺並沒有什麼大作 :p
: 也不會再回應此主題。
: 想和版友分享點什麼的心情,一點一點被磨滅了。

算是題外插花

你的文章當中常常要別人客客氣氣快快樂樂的討論
那是你的 style,就算是普遍認為是對的
別人也可以擁有他 style 的自由

Lordaeron 回 H45 那篇,被你拿來說教
沒錯,H45 那篇的確提供了一些額外的資訊,
也感謝他讓大家增廣見聞,事後補刀也補的很完整

但是對於他回文的理由「回答我如何 one thread 作成」
(如果他是直接回這個 thread 的原發文者,或許就沒問題)
本質上似乎就是有偏差

Lordaeron 跳出來指正這個錯誤,本身並無不妥
(當然,個人語氣問題就按下不表,畢竟沒有髒字也沒有人身攻擊)
也壓根跟你回他的那篇內容沒啥關聯,因為那已經無關什麼個人觀點
而且,像我這種無知鄉民還十分感謝他
不然我還會傻傻的以為那就是正解

有人分享是件好事,但是傳達錯誤觀念就是壞事
錯的事情不會因為客客氣氣快快樂樂,就變成是對的事情

因為有人嚴厲質疑,就不想分享自己的看法、不回應別人的質疑
說實在的,那也不過就是變相的一言堂


====
我還以為,技術人員通常首要追求的是真理
從 Ruby 版事件跟這次事件,我開始有點懷疑

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.199.201
Terry
2006-11-19 05:35:03 UTC
Permalink
※ 引述《TonyQ (骨頭)》之銘言:
: ※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: : 不然我還會傻傻的以為那就是正解
: : 有人分享是件好事,但是傳達錯誤觀念就是壞事
: : 錯的事情不會因為客客氣氣快快樂樂,就變成是對的事情
: : 因為有人嚴厲質疑,就不想分享自己的看法、不回應別人的質疑
: : 說實在的,那也不過就是變相的一言堂
: 是這樣嗎?
: 非關今天的問題,
: 如果你真的會傻傻從文章就以為是正解,那可能你沒有真正處理過相關問題,
: 還有你對資訊的選擇態度是錯的,網路上的資訊本來就是要自己去篩選過。
: 個人對這種消息都只是抱持著嘗試的態度而已。
: 再說從example應該就可以了解他所使用的內容,
: 我不認同今天 Lordaeron 用"自己設想出的問題"去反駁"可能的建議"。
: 畢竟今天不是每個網站都是AOL那樣的規模,
: 還有現今真的有很多程式設計師在寫code generator就可以解決的問題,
: 我從來不相信有甚麼標準解法或者一定不能這樣做的。
: 我倒是覺得這種沒有焦點(並非在問題的解決,而是在能不能解決問題)的爭論,
: 才是構成一言堂的主因。
: 而且沒有共識且高姿態的狀況下,這根本算不上討論,
: 充其量不過是裝老鳥在電菜鳥而已。
: 我舉個例子而言,
: 以今天要畫出 *
: ***
: *****
: 我用System.out.println(" *");
: System.out.println(" ***");
: System.out.println(" *****"); 可以做到,
: 為甚麼要因為我這樣做而跑出來大罵『為甚麼你不是用迴圈』,
: 『如果問題都只需要像這樣解就不需要程式設計師了』。
: 問題只要能解決,這樣一點道理都沒有嘛。
: 自我的過度設限狀況下,最好的方式是建議,而非批評。
: OK,網路上不過是個討論的地方罷了,
: 這種不愉快,不出三五個小時就會消去,
: 只是這樣的討論串,真的能產生比較好的結果? 令人懷疑:)
1. 我不需要你的認同, 同時你也不需要我的認同.
2. 你如果是搞<技術> 就要實事求是, 針對問題.
3. 如果你只想吊一下書包, 不管裏面裝什麼, 請你別加技術兩個字上去
4. 台灣的progammer的積極性, 比大陸的都還不如(當然爛的全球都一樣), 更
別說和老外比了, 不然你大可以試將這個thread 的問題拿到大陸和news group
去看看.
5. 再說, 我只針對問題, 沒針對任何特定的人來處理.
當然別質疑我時, 我還是會將別人的疑問解決.
6. 討論你爽不爽是你個人的問題, 你不能被質疑, 也是你個人的問題.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.138.251.160
骨頭
2006-11-19 13:01:15 UTC
Permalink
--
 String temp="relax"; | Life just like programing
 while(buringlife) String.forgot(temp); | to be right or wrong
 while(sleeping) brain.setMemoryOut(); | need not to say
 stack.push(life.running); | the complier will
 stack.push(scouting.buck()); | answer your life
 stack.push(bowling.practice()); | Bone everything

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68

继续阅读narkive:
Loading...