使用Erlang訊息機制實現穩定婚姻問題
如何在非同步訊息傳遞中實現穩定婚姻Stable Marrige問題,這是使用Erlang編碼的原始碼實現。
Solving the Stable Marriage problem in Erlang | th
穩定婚姻問題是這樣:
假設有n個男人和n個女人,每位男士都要和所有的女士進行短暫的單獨交流,併為她們打分,然後按照喜歡程度,對每一位女士進行排序;同樣的,每位女士也要對所有男士進行打分和排序。每個男人只能配一個女人,如果沒有一個人喜歡兩個人,那麼所有這些婚姻都是穩定的。
對於這個問題描述,假設在我們系統中有三個模組:
1.一個模組代表男人
2.一個模組代表女人
3.一個模組代表好娘中介機構,複製給男女配對策劃的。
如下圖:
[img index=1]
注意上圖中每一個訊息過程,首先,策劃者orchestrator向兩個男人發出訊息表示開始搶女人,最左邊的男人提議了一個女人,這個女人接受了這個男人,男人向策劃者報告自己配對了一個女人,下面競爭來了,左邊第二個男人也看中了這個女人,這個女人發現第二個男人比第一個更好,接受了第二個男人,同時反悔拒絕了第一個男人,第二個男人高興地向策劃者報告自己配對成功一個女人,第一個男人沮喪地報告自己沒有配對。
男人向女人求愛propose這個過程必須是同步的,一直等到他能得到一個求愛結果的答案,但是所有其他的聯絡都是非同步的。
注意Erlang的OTP-sense的同步呼叫還和通常Java/C中透過堵塞執行緒呼叫實現的同步不同。這裡的同步通訊還是透過非同步訊息傳遞,但是呼叫過程是非同步等待直到獲得一個回應才繼續向下執行。
Erlang的原始碼:Github
相關文章
- 06.Android之訊息機制問題Android
- OC訊息機制,訊息轉發機制
- Android程式間通訊–訊息機制及IPC機制實現薦Android
- 線上課堂百萬級訊息如何實現穩定互動?
- Android-Handler訊息機制實現原理Android
- 訊息機制
- CKafka如何助力騰訊課堂實現百萬訊息穩定互動?Kafka
- Fluter訊息機制之微任務實現原理
- Erlang中頻繁傳送遠端訊息要注意的問題
- iOS訊息機制iOS
- SAP訊息機制
- 用redis實現訊息佇列(實時消費+ack機制)Redis佇列
- 訊息機制篇——初識訊息與訊息佇列佇列
- JMS java 訊息機制Java
- Windows訊息機制概述Windows
- iOS:利用訊息轉發機制實現多播委託iOS
- 簡單實現Android中的訊息迴圈機制Android
- Android訊息機制Message訊息池Android
- 顧森:穩定婚姻問題和Gale-Shapley演算法演算法
- 學習 Android Handler 訊息機制需要注意這些問題!Android
- 使用SpringCloud Stream結合rabbitMQ實現訊息消費失敗重發機制SpringGCCloudMQ
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- Android訊息傳遞之Handler訊息機制Android
- flutter 訊息傳遞機制Flutter
- android訊息機制—HandlerAndroid
- RabbitMQ 訊息確認機制MQ
- 理解 Android 訊息機制Android
- 重拾 ObjC 訊息機制OBJ
- 簡析Windows訊息機制Windows
- Kafka 訊息儲存機制Kafka
- Android訊息機制HandlerAndroid
- Android 之訊息機制Android
- Handler訊息傳遞機制
- Android的訊息機制Android
- WebRTC中的訊息機制Web
- WTL的訊息機制 (轉)
- 每個 Android 開發者必須知道的訊息機制問題總結Android
- 使用 NSProxy 實現訊息轉發