不輟集

觀電影《飛越瘋人院》後的一點思考

電影《飛越瘋人院》(One Flew Over the Cuckoo’s Nest)是基於 1962 年肯·克西(Ken Kesey)的同名小說改編,1975年上映,並獲得當年的第48屆奧斯卡五項大獎。男主角是藍道爾·麥克莫菲(Randle McMurphy),由傑克·尼克爾森(Jack Nicholson)扮演,女主角是護士拉契特(Ratched),由路易斯·弗萊徹(Louise Fletcher)扮演。

麥克莫菲是一個罪犯,很好鬥,還曾經強姦了 15歲的少女,入獄後為了擺脫勞改,申請去了精神病院。在病院裏面,他發現只有少數人是跟他一樣是罪犯,而大多數居然是自願進來的。這令他很不解,明明他們都抱怨病院的不好,為什麼還不離開呢。

接續讀落

《純粹理性批判》閱讀筆記一:導言

《純粹理性批判》是德國哲學家康德(Kant)於1781年寫的(1787年再版),在世界上影響深遠,與他寫的另外兩本《實踐理性批判》和《判斷力批判》合稱三大批判。

《純粹理性批判》出版後,頭幾年根本沒人讀懂,因為這本書實在太枯燥無味了,甚至還被誤讀。即使是現在,要讀懂這本書也不是件容易的事。本人閱讀的是商務印書館2011年出版的《漢譯世界學術名著叢書:純粹理性批判》,藍公武譯著。譯文頗有古意,非常簡練,需要慢慢讀、重複讀,不然很容易陷入迷霧。

本書探討的核心問題是先天綜合命題如何可能,又可分為四個問題:

  1. 純粹數學如何可能?
  2. 純粹自然科學如何可能?
  3. 視為自然傾向的玄學(形而上學)如何可能?
  4. 視為學問的玄學(形而上學)如何可能?

接續讀落

Go內存模型

本文講述在何種情況下,一個協程(goroutine)中寫入的變量值可被另一個協程中觀察到。

先發生(happens before)

讓我們來理清下時間的發生順序。

如果事件 e1在事件 e2 之前發生,那麼事件 e2 在事件 e1 之後發生。同樣,如果 e1 既不在事件 e2 之前也不在 e2 之後發生,那麼事件 e1 和 e2 同時發生。

接續讀落

網絡I/O

區分幾個概念:

  • 同步(synchronous)和異步(asynchronous)是消息通知的機制,是從消息發送方的角度看;
  • 阻塞(blocking)和非阻塞(non-blocking)是線程等待通知的過程,是從接收方的角度看。
    多路復用是指單一線程監聽多個文件描述符(file descriptor)。
  • 邊緣觸發(edge-trigger)和水平觸發(level-trigger)是當文件描述符關聯的內核緩衝區變化時通知應用程序的兩種方式。邊緣觸發是當狀態變化時通知,水平觸發是只要滿足條件就一直通知。
    epoll 默認是使用水平觸發,但提供邊緣觸發模式。
    所謂水平觸發,就是只要達到某個限定的水平就一直通知;而邊緣觸發是處在上升沿或下降沿的時候觸發。

接續讀落

Go調度器

現在有三種常見的線程模型,包括:

  1. N:1,即 N 個用戶線程對應一個系統線程,節省上下文(context switch)切換開銷;
  2. 1:1,即 1 個用戶線程對應一個系統線程,充分利用多個核心(multi-core);
  3. M:N,即 M 個用戶線程對應 N 個系統線程,節省上下文開銷並充分利用多個核心。

Go的線程調度模型就是 M:N。

接續讀落