原创 堆棧分配對象的成員存儲位置

棧上創建的臨時對象及其成員可以確定存儲在棧上 但是如果在堆上面手動分配一個對象,那麼這個對象的成員究竟存儲在內存中的什麼位置? 分別創建一個棧上分配的臨時結構體對象和一個堆上手動分配的結構體對象,打印存儲位置。 #include <s

原创 線程與內核綁定

多內核主機上,創建了多個線程,可以把線程綁定到指定的內核上。 這樣可以充分發揮多個內核的性能優勢,減少上下文切換。 線程與內核綁定方法: 1、頭文件  #include <sys/sysinfo.h> #include <pthread

原创 自制golang併發處理小框架

併發 通過channel、互斥鎖、定時器三者結合,完成了一個併發處理的函數接口。 通過傳入協程池數、超時時間來限制協程的併發處理(協程池的數量應該小於數據循環處理的次數)。 參數中指定待處理的數據以及循環的次數,以及註冊回調函數

原创 ++i和i++都是線程不安全

++i和i++的自加過程: 1、i++ 1)將i值取出放到寄存器 2)將寄存器中的值返回 3)寄存器中的值加1 4)使用寄存器值修改i的值   2、++i 1)將i值取出放到寄存器 2)寄存器中的值加1 3)將寄存器中的值返回並修改i的值

原创 線程學習筆記(windows核心編程)

1、使用MsgWaitForMultipleObjects或WaitForMultipleObjects時注意: 其第一個參數最大值64 即等待的線程最多不超過64個 錯誤:等待超過64個線程,返回WAIT_FAILED,參數無效   2

原创 有點意義

====================================================================== 爲什麼沒事兒幹還能拿薪水你還不快樂? 不快樂是因爲可以像只豬一樣懶,卻無法像只豬一樣懶得心安理得

原创 linux與Windows共享文件samba

1、下載安裝samba yum -y install samba (centos) 或 apt-get install samba (ubuntu)   2、創建linux用戶(已經存在則不需要) adduser -d /home/sa

原创 人啊,你總是太現實

人啊,你總是太現實。 現實讓你去適應他的潛規則,而你則失去了自己。 你需要仰望的是你心中的靈,你的神便是你自己。 你的身份是卑微的,但是你的精神一定要是高貴的。 雖然讀起來有失偏頗,但是總能在其中找到共鳴。 http://www.zd

原创 SIGPIPE導致的程序退出

當服務器或客戶端非正常退出的時候,另一方繼續send時直接造成程序退出。 gdb調試結果 send已經的關閉的套接字時,收到SIGPIPE信號,系統對該信號的默認處理方式是程序直接退出。 若不想直接退出可以對SIGPIPE信號設置自

原创 linux防禦攻擊

一、服務器可能遭受的攻擊 1、SYN/ACK Flood攻擊(半連接攻擊) 主要是通過向受害主機發送大量僞造源IP和源端口的SYN或ACK包,導致主機的未連接隊列被長時間佔用並且資源耗盡,而正常的SYN請求被丟棄。由於源都是僞造的故追蹤起

原创 libevent多線程

使用libevent編寫多線程服務端 一、設計框架: 1)主線程監聽連接各種事件,創建多個工作線程處理具體業務 2)收到連接時創建對象管理,並綁定到一個線程 3)主線程監聽到一個讀事件,將該連接添加到所綁定的線程的處理隊列 4)工作線程一

原创 偵探調查罪案---採用程序計算

偵探調查了罪案的四位證人。從證人的話偵探得出的結論是:如果男管家說的是真話,那麼廚師說的也是真話;廚師和園丁說的不可能都是真話;園丁和雜役不可能都在說謊;如果雜役說真話,那麼廚師在說謊。偵探能判定這四位證人分別是在說謊還是在說真話嗎?

原创 Go Append實現

切片(s) len(s) 獲取長度 cap(s) 獲取容量 Append(s, d)實現時比較:len(s)+len(d) > cap(s) package main import ( "fmt" ) func main()

原创 Goroutine 嚴重故障處理

程序中啓用多個Goroutine,如果其中一個Goroutine因爲一些隱式的運行時錯誤將調用panic,如果沒有合適的處理,將導致所有的Goroutine終止。 嚴重故障 panic Go語言提供了一個內置的panic方法,用來創

原创 Go 自定義排序

sort Go語言包中包含了排序包 sort,其中針對一般的strings、int類型已經有了排序方法 sort.Ints(a []int) sort.Strings(a []string) 自定義排序 1、分別實現三個函數 fun