[python] File I/O, internet framework(MT, Select, epoll, IOCP)
這兩天又再翻新架構了 = =
大概學長真覺得我是操人(耐操的人)....
不過這次教訓又再次提醒自己,對於不熟或一知半解的東西,千萬別拿來用。。。
(但一開始什麼都不知道的人,誰知道那能不能用.... 桿)
.................................................<<小抱怨一下,開始說正題好>>
第一個要提的是python 的FILE I/O
我每次都沒仔細搞清楚'ab', 'rb+', 'w+'... 之間的差異,想說排列組合部都那幾個... 結果誤用 = =
詳細說明可以參考 這裡 , 至少在網路上這篇最詳細...
幾個最常用到的mode
另外一個issue也是最近才真正懂得,就是一般network I/O分類
可依 blocking/nonblocking 與 synchronized/asynchronized 分類
幾個常見的是
1. blocking
最常使用,像 Multithreading 最常見
2. nonblocking synchronized
即select、epoll 即一般人說的reactor。
select: 是指每次os會去檢查一個 fd_set(file descriptor, 像是readfd, writefd, exceptfd等等)
詢問是否timeout,
3. nonblocking asynchronized
即 IOCP、linux NIO 即一般人說的proactor。
這裡有相當清楚的說明。
另外附記一下
a. FD_SET的大小,winsocket的 select僅支援64個, unix可到1024個。default port =65534
b.一般socket預設為blocking, 要改為nonblocking需要設定socket參數(ioct)
c. 網路上人家寫的socket 通訊,有空再看。
大概學長真覺得我是操人(耐操的人)....
不過這次教訓又再次提醒自己,對於不熟或一知半解的東西,千萬別拿來用。。。
(但一開始什麼都不知道的人,誰知道那能不能用.... 桿)
.................................................<<小抱怨一下,開始說正題好>>
第一個要提的是python 的FILE I/O
我每次都沒仔細搞清楚'ab', 'rb+', 'w+'... 之間的差異,想說排列組合部都那幾個... 結果誤用 = =
詳細說明可以參考 這裡 , 至少在網路上這篇最詳細...
幾個最常用到的mode
rb | 這是default值。file pointer會在offset=0的位置。開啟一個已存在的檔案並做binary read-only。 |
rb+ | 開啟一個已存在的檔案並對其做binary read/write。offset=0 |
wb+ | 開啟一個的檔案並對其做binary read/write。 若存在則會被overwrite。 若不存在則會建立一個新的檔案。 |
ab+ | 開啟一個檔案並對其做 binary append/read。 若檔案存在,File pointer offset= end of the file。 若檔案不存在,則會建立一個新的檔案,並提供Read/Write。 |
另外一個issue也是最近才真正懂得,就是一般network I/O分類
可依 blocking/nonblocking 與 synchronized/asynchronized 分類
幾個常見的是
1. blocking
最常使用,像 Multithreading 最常見
2. nonblocking synchronized
即select、epoll 即一般人說的reactor。
select: 是指每次os會去檢查一個 fd_set(file descriptor, 像是readfd, writefd, exceptfd等等)
詢問是否timeout,
3. nonblocking asynchronized
即 IOCP、linux NIO 即一般人說的proactor。
這裡有相當清楚的說明。
另外附記一下
a. FD_SET的大小,winsocket的 select僅支援64個, unix可到1024個。default port =65534
b.一般socket預設為blocking, 要改為nonblocking需要設定socket參數(ioct)
c. 網路上人家寫的socket 通訊,有空再看。
Comments
Post a Comment