Atlas原始碼學習(五)

2021-06-26 00:35:54 字數 1439 閱讀 5777

在atlas中,可以將執行緒分為主線程和工作執行緒。其中工作執行緒主要負責處理mysql的操作請求,而主線程除具備工作執行緒的處理能力外,同時負責接收使用者請求以及全域性的事件處理。

1. 基本的資料結構 

atlas執行緒統一由如下結構組成:

typedef struct chassis_event_thread_t  chassis_event_thread_t;
無論是工作執行緒還是主線程都會由執行緒池統一管理,其結構如下

struct chassis_event_threads_t ;

2. 主線程

主線程始終為執行緒池中的第乙個位置,即其index為0.

主線程會負責全域性的訊號處理,如sigterm和sigint:

signal_set(&ev_sigterm, sigterm, sigterm_handler, null);

event_base_set(chas->event_base, &ev_sigterm);

signal_add(&ev_sigterm, null);

signal_set(&ev_sigint, sigint, sigterm_handler, null);

event_base_set(chas->event_base, &ev_sigint);

signal_add(&ev_sigint, null);

event_set(&(listen_sock->event), listen_sock->fd, ev_read|ev_persist, network_mysqld_con_accept, con);

event_base_set(chas->event_base, &(listen_sock->event));

event_priority_set(&(listen_sock->event), 0);

event_add(&(listen_sock->event), null);

其中,network_mysqld_con_accept主要負責接收客戶端請求,為其分配工作執行緒:

void network_mysqld_con_accept(int g_gnuc_unused event_fd, short events, void *user_data)
void chassis_event_add(network_mysqld_con* client_con)
執行完上述兩個函式後,事件佇列中將會有乙個新的連線物件,同時某個工作執行緒(包括主線程)被喚醒。

3. 工作執行緒

工作執行緒接到主線程發來的通知後,從事件佇列中取出乙個連線物件,進入network_mysqld_con_handle函式中,開始進入狀態機,前面的文章已經說過,不再重複。

nginx原始碼學習(五)

我們接著上篇文章來講講ngx get options函式。這個函式就在nginx.c檔案中,我們來看看。引數argc,argv我們在前面的文章中都已經提到了,在這裡我們看ngx get options裡面的for迴圈。它的作用就是把所有的執行時引數迴圈一遍,判斷是不是合法。例如 nginx s st...

linux 0 11 原始碼學習(五)

head.s head.s 是系統模組的入口,其編譯器已經是gnu彙編,但從功能上將仍然屬於核心啟動階段,主要的功能是對386 cpu的初始化,如使用者堆疊 idt gdt和頁表。因此從資料夾的歸屬看,它仍然放在boot資料夾中,與bootsect和setup一塊。head.s的核心功能 簡單的暫存...

linux 0 11 原始碼學習(五)

head.s head.s 是系統模組的入口,其編譯器已經是gnu彙編,但從功能上將仍然屬於核心啟動階段,主要的功能是對386 cpu的初始化,如使用者堆疊 idt gdt和頁表。因此從資料夾的歸屬看,它仍然放在boot資料夾中,與bootsect和setup一塊。head.s的核心功能 簡單的暫存...