GLib 就是懶.GThreadPool 高效的執行緒池
開發複雜的程式時,執行緒(Thread)隨處可見,在高負載的應用程式中,就常會使用到多執行緒所構成的演算法,如 Apache 此類有許多流量及使用者操作的程式,就運用 Thread 做負載的分配。但是,每當 Thread 的建立和摧毀,會造成額外的系統資源開銷,若是有大量 Thread 增減將會造成程式效能不彰,所以最好的辦法便是回收並重新運用已經被建立的 Thread。因此,GLib 提供了 GThreadPool 的機制,可重復利用 Thread 以減少不必要的開銷。
這是一個使用 GThreadPool 的範例程式:
這是一個使用 GThreadPool 的範例程式:
void mythread(gpointer data, gpointer user_data)
{
printf("%s\n", data);
printf("%s\n", user_data);
}
void main()
{
gchar *data = "this is data";
gchar *user_data = "this is user_data";
GThreadPool *pool;
if(!g_thread_supported())
g_thread_init(NULL);
/* create thread pool */
pool = g_thread_pool_new(mythread, user_data, -1, FALSE, NULL);
if (pool==NULL)
printf("ERROR\n");
/* start three threads */
g_thread_pool_push(pool, data, NULL);
g_thread_pool_push(pool, data, NULL);
g_thread_pool_push(pool, data, NULL);
}
留言
張貼留言