[python] File I/O, internet framework(MT, Select, epoll, IOCP)

這兩天又再翻新架構了 = = 
大概學長真覺得我是操人(耐操的人)....
不過這次教訓又再次提醒自己,對於不熟或一知半解的東西,千萬別拿來用。。。
(但一開始什麼都不知道的人,誰知道那能不能用.... 桿)

.................................................<<小抱怨一下,開始說正題好>>

第一個要提的是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

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

R 語言:邏輯回歸 Logistic Regression using R language (二)