Linux高性能服務器編程(三)

7. Linux服務器程序規範

7.1. UID、EUID

一個進程擁有兩個用戶ID:UID、EUID

  • 做任何一個操作時,最終看它有沒有權限,是在判斷有效用戶ID是否有權限
  • 比如su程序,要訪問 /etc/passwd,而訪問該文件需要root權限。將su程序設置set-user-id標誌,普通用戶啓動的su程序就能依據EUID來執行。

7.2. 進程間關係

在這裏插入圖片描述
在這裏插入圖片描述

7.3 查看、修改資源限制

  • ulimit
    修改當前shell環境下的資源限制(軟限制、硬限制),對該shell啓動對所有後續程序有效
  • 修改配置文件

7.4 獲取、改變工作目錄

char* getcwd(char* buf, size_t size);

int chdir(const char* path);

7.5 設置後臺進程

int daemon(int nochdir, int noclose);
	nochdir:
		==0,工作目錄切換爲 / 
		!=0,繼續使用當前工作目錄
	noclose:
		==0,標準輸入、標準輸出、標準錯誤重定向到/dev/null
		!=0,依然使用原來對設備

8. 高性能服務器程序框架

8.1 C/S模型

在這裏插入圖片描述

8.2 I/O模型

阻塞IO:阻塞的文件描述符
非阻塞IO:非阻塞的文件描述符

  • 可能被阻塞的系統調用:accept、send、recv、connect

對於非阻塞的I/O系統調用總是立即返回,如果事件沒有立即發生,返回-1,根據errno來區分是否出錯。

  • accept、send、recv:errno設置成EAGAIN或EWOULDBLOCK
  • connect:errno設置成EINPROGRESS

只有在事件已經發生的情況下操作非阻塞I/O,才能提高程序的效率。
非阻塞I/O通常要和其它I/O通知機制一起使用

  • I/O複用:能提高程序效率的原因在於具有同時監聽多個I/O事件的能力
  • SIGIO信號

8.3 池

內存池:socket的接受緩存、發送緩存
進程池、線程池
連接池:連接數據庫的長久連接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章