非同步多執行緒C S框架gko pool

2021-06-27 16:28:07 字數 3923 閱讀 6502

曾經在上家公司做了乙個內網p2p的傳輸工具名曰gingko

當時太菜了,網路部分寫的很差,各種阻塞式網路通訊

後來離職把memcached的**研究了一下,感覺裡面的網路模型非常先進

我就把memcached的網路部分抽取出來和gingko做了結合,寫成了乙個網路框架叫gko_pool

大致特性是:

看**發現memcached狀態機有個邏輯上的bug 順手給memcached提了個patch

後來這事就被淡忘了,過了兩年被維護者發現合到master上了,維護者是這麼說的:

wow, two years old… and it looks correct to me. if that update_event fails the connection might zombie. it』s very hard for that to fail and it』s been that way forever.

pushed a commit for the next release.

言歸正傳,可以毫不誇張的說memecached是多執行緒非同步網路程式設計的乙個豐碑(nginx是多程序非同步網路程式設計的乙個豐碑)

我就把memcached的網路部分抽取出來寫成了乙個網路框架叫gko_pool

舉個栗子:http刷票器,在我的筆記本虛機上也能達到300kqps,控制了一下速度,一不小心就把sina的伺服器打掛了

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133 /*

**  created on: may 18, 2012

*      author: auxten

*/#include "gko.h"

#include

/// gingko global stuff

s_gingko_global_t

gko;

pthread_mutex_t

lock

=pthread_mutex_initializer;

intcnt=3;

intcounter=0

; void

report_result

(void*c

,const

char

*msg)

pthread_mutex_unlock(&

;lock);

}intmain

(int

argc

,char**

argv)

; char

srv[3]

[32]=

; inti

=cnt;

while(i

--)sleep(10

);//由於發請求時非同步的,這裡也沒去處理response,sleep秒再退出

return0;

}我為了刷票刷的真實,還寫了這麼多useragent,刷票界的良心啊,哈哈哈

更多例子,比如:乙個自定義協議的client、server等請移步github

這套庫的穩定性大家不用質疑,已經用在了我現在公司的上萬台伺服器的很多網路daemon上

多執行緒 執行緒同步 非同步

同步和非同步 同步和非同步通常用來形容一次方法的呼叫。同步方法呼叫一旦開始,呼叫者必須完成所有的操作一直到方法呼叫結束,其他呼叫者才能繼續後續的行為,非同步方法呼叫類似乙個訊息傳遞,一旦開始,方法呼叫就會立即返回,其他呼叫者則可以無需等待,可以立即繼續後續的操作。非同步 不過,如果 我們 趕時髦,就...

非同步多執行緒 3 多執行緒安全

多執行緒去訪問同乙個集合,一般沒問題,執行緒安全問題一般是出在同時修改乙個物件的時候。執行緒安全問題 一段 單執行緒執行和多執行緒執行,結果不一致。例如這個方法,很簡單,迴圈開啟task往乙個list裡add,等3秒鐘執行完後列印出來list的長度,如果是單執行緒,肯定是10000,現在看看多執行緒...

同步 非同步 多執行緒

1 首先明確一點,對於單核cpu,任意乙個時刻只有乙個執行緒在執行。那麼既然這樣,多執行緒還有什麼意義呢?舉例來說,現在只有乙個人,要做好幾個任務。單執行緒就是,任務乙個乙個地做,必須做完乙個任務後,再去做另乙個任務。多執行緒就是一會做這個任務,一會做那個任務,每個任務做一會,不停的切換。顯然,最後...