程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MariaDB中的thread pool詳細介紹和使用方法,mariadbpool

MariaDB中的thread pool詳細介紹和使用方法,mariadbpool

編輯:MySQL綜合教程

MariaDB中的thread pool詳細介紹和使用方法,mariadbpool


Thread pool是什麼

MySQL是每個連接上來都要創建一個線程來執行語句。這樣每一個新的連接進來即會創建一個新的線程,這種動作對MySQL本身壓力比較大。Threadpool是提供一種線程代理的模型執行每個連接的語句。而MySQL內部維護一個可能接受的線程總數,減少線程太多在CPU切換等方面的壓力。

使用Threadpool的好處

1.使用線程代理的模型在連接數已知可控的情況下,提前創建好過線程並利用操作系統的threadpool技術維護,能減少很多開銷。

2.盡可能的使用操作系統的線程方面的管理,把線程管理開銷降到最低。 3. 利用
thread_pool_max_threads控制資源使用

什麼情況下Thread Pool作用比較小:

1.並發太高及有長的語句操作。 如:內部threadpool的總數為:10個,外面並發來了1000個請求,現在都來爭用這10個內部線程,這個開銷也比較重。同樣道理加大threadpool後,innodb內部的並發也會受到限制。

2.突發的大量連接。這個情況下threadpool還有一定的作用,但是效果不明顯了。如果為了防止大量的連接進來。可以考慮增加thread_pool_min_threads及thread_pool_idle_timeout的值,讓平時也維護一個大的threadpool

3.高並發的環境,有可能簡單的查詢也會變慢。雖然select 1;這樣的查詢很簡單應該會很快完成。但在threadpool的下面也需要排隊等待從theadpool得到可用的線程才能執行。

使用方法:

目前支持threadpool的有MariaDB, Percona, 官方MySQL的一個收費功能。配置啟用。

在my.cnf
復制代碼 代碼如下:
[mysqld]
#thread pool
thread_handling=pool-of-threads


C# ThreadPool與Thread多線程 問

/ / 線程池示例
  using System;
  using System.Threading;
  public class Test
  {
  // 存放要計算的數值的字段
  static double number1 = -1;
  static double number2 = -1;
  public static void Main()
  {
  // 獲取線程池的最大線程數和維護的最小空閒線程數
  int maxThreadNum, portThreadNum;
  int minThreadNum;
  ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
  ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
  Console.WriteLine("最大線程數:", maxThreadNum);
  Console.WriteLine("最小空閒線程數:", minThreadNum);
  // 函數變量值
  int x = 15600;
  // 啟動第一個任務:計算x的8次方
  Console.WriteLine("啟動第一個任務:計算的8次方。", x);
  ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
  // 啟動第二個任務:計算x的8次方根
  Console.WriteLine("啟動第二個任務:計算的8次方根。", x);
  ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc2), x);
  // 等待,直到兩個數值都完成計算
  while (number1 == -1 || number2 == -1) ;
  // 打印計算結果
  Console.WriteLine("y() = ", x, number1 + number2);
  }
  // 啟動第一個任務:計算x的8次方
  static void TaskProc1(object o)
  {
  number1 = Math.Pow(Convert.ToDouble(o), 8);
  }
  // 啟動第二個任務:計算x的8次方根
  static void TaskProc2(object o)
  {
  number2 = Math.Pow(Convert.ToDouble(o), 1.0 / 8.0);
  }
  }...余下全文>>
 

java線程池newCachedThreadPool怎使用

ExecutorService threadPoll = Executors.newCachedThreadPool(); //創建線程池
threadPoll.execute(new MyThread());

這個就行了,如何獲取一個線程,jvm自己會判斷,用完jvm自己會釋放的...
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved