c 實現用SQL池(多執行緒),批量執行SQL語句

2021-08-15 06:05:04 字數 3183 閱讀 1654

在實際專案開發中,業務邏輯層的處理速度往往很快,特別是在開發socket通訊服務的時候,網路傳輸很快,但是一旦加上資料庫操作,效能一落千丈,資料庫操作的效率往往成為乙個系統整體效能的瓶頸。面對這問題,我們怎麼辦呢?好,下面我就為大家介紹一種方法:構建sql池,分離業務邏輯層和資料訪問層,讓業務邏輯層從低效的資料庫操作解脫,以提高系統整體效能。

(一)sql池

sql池是sql容器,用於存放業務邏輯層拋過來的sql語句。sql池主要提供以下幾種方法:

1)internal string pop(),從池中取出sql。

2)internal void push(string item),增加乙個sql到池中。

3)internal string clear(),清空sql池,清空前,返回sql池中所有sql語句。

特別提醒一下,sql池是面向多執行緒的,所以必須對公共資源sql採取鎖機制。這裡採用互斥鎖,當業務邏輯層執行緒往sql池中拋入sql語句時,禁止sql執行執行緒執行sql語句,反之,當sql執行執行緒執行sql語句時,也不允許業務邏輯層執行緒往sql池中拋入sql語句。為什麼要這麼做?因為sql執行執行緒是批量執行sql語句,在批量執行sql語句前,會從池中取出所有sql語句,如果此時業務邏輯層執行緒往sql池中拋入sql語句,則會導致這些sql語句丟失,得不到執行。

下面是sql池**:

using system; 

using system.collections.generic; 

using system.linq; 

using system.text; 

using system.threading; 

namespace test1 

///

/// 獲取sql池數量 

///

internal int32 count  } 

///

/// 從池中取出sql 

///

///

internal string pop()  } 

///

/// 增加乙個sql到池中 

///

///

internal void push(string item) 

//此處向sql池中push sql必須與clear互斥 

mutexsqlpool.waitone(); 

try 

catch

mutexsqlpool.releasemutex(); 

} ///

/// 清空sql池 

/// 清空前,返回sql池中所有sql語句, 

///

internal string clear() 

; //此處必須與push互斥 

mutexsqlpool.waitone(); 

try 

catch

mutexsqlpool.releasemutex(); 

return array; 

} } 

}(二)sql池管理

sql池管理主要用於管理sql池,向業務邏輯層執行緒和sql執行執行緒提供介面。

業務邏輯層執行緒呼叫 public void pushsql(string strsql) 方法,用於向sql池拋入sql語句。

sql執行執行緒呼叫 public void executesql(object obj) 方法,用於批量執行sql池中的sql語句。

注意,sql池管理類採用單例模型,為什麼要採用單例模型?因為sql池只能存在乙個例項,無論是業務邏輯層執行緒還是sql執行執行緒,僅會操作這乙個例項,否則,將會導致sql池不唯一,sql執行無效。

下面是sql池管理類**:12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

5354

5556

5758

5960

6162

6364

6566

6768

6970

using system; 

using system.collections.generic; 

using system.linq; 

using system.text; 

namespace test1 

#endregion 

#region 方法 

///

/// 將sql語句加入sql池中 

///

///

public void pushsql(string strsql) 

///

/// 每隔一段時間,觸發executesql 

/// executesql用於執行sql池中的sql語句 

///

///

public void executesql(object obj) 

catch } 

} } 

} #endregion } }

(三)定時觸發sql執行執行緒

總結有以下三種方法,具體請參見

方法一:呼叫執行緒執行方法,在方法中實現死迴圈,每個迴圈sleep設定時間;

方法二:使用system.timers.timer類;

方法三:使用system.threading.timer;

**如下:12

3456

78910

1112

1314

1516

1718

1920

2122

2324

using system; 

using system.collections.generic; 

using system.linq; 

using system.text; 

using system.threading; 

namespace test1  } 

}

c 執行緒池 多執行緒

1。設定引數類 using system using system.collections.generic using system.text public class stateinfo 執行緒開啟方法類 using system using system.collections.generic ...

python多執行緒執行緒池實現

在python中多執行緒可以使用threading來實現,但實際使用時考慮效能等,大多會使用到執行緒池,下面就是基於python2和python3來說明下執行緒池的使用。import time def testthread fl time.sleep 1 print print fl return ...

多執行緒 執行緒池執行多業務邏輯

1.執行緒池執行不同的業務邏輯.2.獲取每個任務執行的結果 3.最後的結果會用到之前的結果 public class searchuserlistdto catch interruptedexception e system.out.println 111 乙個執行緒池,三個執行緒,執行三個任務,只...