亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123456789
最近訪問板塊 發(fā)新帖
樓主: csumck
打印 上一主題 下一主題

[技術(shù)動態(tài)] 今天聽說了騰訊一個很牛逼的技術(shù), 求問是怎么實現(xiàn)的 [復(fù)制鏈接]

論壇徽章:
9
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-01 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-02 06:20:00每日論壇發(fā)貼之星
日期:2015-11-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-03 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00數(shù)據(jù)庫技術(shù)版塊每周發(fā)帖之星
日期:2015-12-02 15:02:47數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-08 06:20:00
81 [報告]
發(fā)表于 2015-09-28 15:35 |只看該作者
這個是我以前的一個實現(xiàn),  用select實現(xiàn), 替換 mysql_real_query, 現(xiàn)在好像新版本的MYSQL client query, 已經(jīng)增加了類似的代碼,  默認(rèn)就是非阻塞的了.
#include <iostream>
#include <string>
#include <mysql.h>
#include <error_message.hpp>

#ifndef _my_noblock_query_hpp
#define _my_noblock_query_hpp

int mysql_noblock_query(MYSQL *mysql, const char *query, ulong length)
{
   struct timeval tv1;
   fd_set recvfd;
   int  mysql_fd;
   int  ret;
   int int_err;
   std::string str_msg;

  if ( mysql_send_query( mysql,query,length ) )
     return 1;

   //用SELECT檢測有沒有數(shù)據(jù)到達(dá)mysql_fd
  mysql_fd = mysql->net.fd;
  FD_ZERO( &recvfd );
  FD_SET( mysql_fd , &recvfd );
  tv1.tv_sec=600;  // 最多檢查600秒
  tv1.tv_usec=0;
  ret = select( mysql_fd+1, &recvfd, NULL, NULL, &tv1 );
  if( 0==ret )  {
       str_msg =  "Select time out. Query=";
       str_msg += query ;
       warning_message_str(str_msg);
       }
  else if( ret<0 )  {
       int_err = errno;
       str_msg =  "Select run bad. errno=";
       str_msg +=   std::to_string(int_err) ;
       str_msg +=   ", strerror=";
       str_msg +=  strerror( int_err ) ;
       warning_message_str(str_msg);
       }
  return  mysql_read_query_result(mysql);
}

#endif /* _my_noblock_query_hpp */

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
82 [報告]
發(fā)表于 2015-09-29 13:04 |只看該作者
本帖最后由 yulihua49 于 2015-09-29 13:37 編輯
wlmqgzm 發(fā)表于 2015-09-28 15:35
這個是我以前的一個實現(xiàn),  用select實現(xiàn), 替換 mysql_real_query, 現(xiàn)在好像新版本的MYSQL client query, 已 ...

嗯。看了一下。作為AIO例子,還不錯。
但是,異步后在那等,就沒有實際意義了,可以結(jié)合協(xié)程技術(shù),釋放線程。等事件到了再回來處理。

這方面,mysql就比ORACLE強(qiáng)了,OCI似乎沒有開放內(nèi)部連接。

  1. int mysql_noblock_query(MYSQL *mysql, const char *query, ulong length)
  2. {
  3.     int  ret;
  4.     int int_err;
  5.     std::string str_msg;

  6.    if ( mysql_send_query( mysql,query,length ) )
  7.       return 1;

  8.     //用epoll檢測有沒有數(shù)據(jù)到達(dá)mysql_fd,yield,and resume
  9.    ret=do_event(mysql->net.fd,0,600);//前后可千萬不要有線程鎖啊,回來的可不一定是原來的線程。

  10.        if( ret<0 )  {//出錯后可以改同步
  11.            if( -11==ret )  {
  12.         str_msg =  "Select time out. Query=";
  13.         str_msg += query ;
  14.         warning_message_str(str_msg);
  15.         } else {//出錯后可以改同步
  16.         int_err = errno;
  17.         str_msg =  "Select run bad. errno=";
  18.         str_msg +=   std::to_string(int_err) ;
  19.         str_msg +=   ", strerror=";
  20.         str_msg +=  strerror( int_err ) ;
  21.         warning_message_str(str_msg);
  22.         }
  23.         }
  24.    return  mysql_read_query_result(mysql);
  25. }
復(fù)制代碼

論壇徽章:
9
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-01 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-02 06:20:00每日論壇發(fā)貼之星
日期:2015-11-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-03 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00數(shù)據(jù)庫技術(shù)版塊每周發(fā)帖之星
日期:2015-12-02 15:02:47數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-08 06:20:00
83 [報告]
發(fā)表于 2015-10-02 16:58 |只看該作者
本帖最后由 wlmqgzm 于 2015-10-02 17:11 編輯

回復(fù) 82# yulihua49

也是不錯的方案,  其實就是   到了mysql_send_query( mysql,query,length ) )這一步之后,  基本上各類異步IO調(diào)用的手段都可以, 可以結(jié)合項目的實際情況,
進(jìn)行各種處理, 總之, 就是把CPU控制權(quán)交出去就行了, 無論是SELECT, EPOLL, POLL, 協(xié)程 等等都可以.

如果只涉及單條或者少量Mysql連接,  SELECT在這里是比EPOLL更好的方案,  SELECT會移交CPU, 也是最通用的方案,適應(yīng)一切場合,最終用戶直接調(diào)用就可以, 不需要了解內(nèi)部,像平時的mysql_real_query一樣使用就好了.
另外,由于SELECT函數(shù)的高效率,最新mysql的代碼中, 所有"sleep(微秒)" 函數(shù)的調(diào)用, 也是直接用SELECT調(diào)用替換了.

當(dāng)然, 使用 協(xié)程  也是更好的辦法之一, 但是要麻煩一些,通用性沒有這么好.
   

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
84 [報告]
發(fā)表于 2015-10-03 11:14 |只看該作者
本帖最后由 yulihua49 于 2015-10-03 11:38 編輯
wlmqgzm 發(fā)表于 2015-10-02 16:58
回復(fù) 82# yulihua49

也是不錯的方案,  其實就是   到了mysql_send_query( mysql,query,length ) )這一步 ...

epoll也是會移交CPU的。
甚至,你就是采取同步操作,也是會移交CPU的。
好像sleep內(nèi)部就是select。

使用協(xié)程,麻煩不止一點點。實在是太麻煩了,尤其是在C/C++。
在lua,go。。。。我弄不明白他們的resume條件是怎樣設(shè)定的。我這里是由epoll決定的,yield時控制權(quán)交給epoll,激活后,得context,判定是個AIO的yield引起的,就resume。這期間如果該線程得到的是誰的context,就給誰干活。
所以,這個線程說不定給誰干活去了,也說不定哪個線程會給你resume。這個控制自然是非常非常的麻煩,還會出各種意想不到的問題。
我的接口看起來簡單,就一個函數(shù)。在它背后,至少1000行代碼在支援它的工作。
普通的協(xié)程,只在單線程工作,控制簡單的多,但是不能發(fā)揮多核并行處理的優(yōu)勢。

我的模型,已經(jīng)測試成功,可以應(yīng)付socket和文件AIO的工作。oracle沒有開放他的socket和回調(diào)函數(shù),所以沒辦法協(xié)程。
mysql這個很好,我還沒試過。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
85 [報告]
發(fā)表于 2015-10-05 09:45 |只看該作者
wlmqgzm 發(fā)表于 2015-09-28 15:35
這個是我以前的一個實現(xiàn),  用select實現(xiàn), 替換 mysql_real_query, 現(xiàn)在好像新版本的MYSQL client query, 已 ...


你的代碼里最后一句mysql_read_query_result(mysql)   這里假如網(wǎng)絡(luò)還沒有讀到足夠的數(shù)據(jù),是不是會阻塞的?

論壇徽章:
9
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-01 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-02 06:20:00每日論壇發(fā)貼之星
日期:2015-11-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-03 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00數(shù)據(jù)庫技術(shù)版塊每周發(fā)帖之星
日期:2015-12-02 15:02:47數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-08 06:20:00
86 [報告]
發(fā)表于 2015-10-05 10:58 |只看該作者
本帖最后由 Charlie_gan 于 2015-10-08 10:30 編輯

回復(fù) 1# 小尾巴魚


論壇徽章:
9
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-18 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-01 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-02 06:20:00每日論壇發(fā)貼之星
日期:2015-11-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-03 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00數(shù)據(jù)庫技術(shù)版塊每周發(fā)帖之星
日期:2015-12-02 15:02:47數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-08 06:20:00
87 [報告]
發(fā)表于 2015-10-12 19:37 |只看該作者
本帖最后由 wlmqgzm 于 2015-10-12 19:38 編輯

回復(fù) 85# csumck

在這里不會, 因為只有幾字節(jié)的數(shù)據(jù), 只是返回執(zhí)行成功與否.

對于select返回大量數(shù)據(jù)的情況,  需要另外處理的地方是  mysql_store_result 這個函數(shù).  這里要加SELECT或者類似的處理.


   

論壇徽章:
6
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-11-27 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-01 06:20:00每日論壇發(fā)貼之星
日期:2015-12-01 06:20:0015-16賽季CBA聯(lián)賽之佛山
日期:2017-03-26 23:38:0315-16賽季CBA聯(lián)賽之江蘇
日期:2017-07-17 10:08:4415-16賽季CBA聯(lián)賽之北京
日期:2018-03-04 17:01:50
88 [報告]
發(fā)表于 2015-10-13 13:13 |只看該作者
嗯。看了一下,還不錯。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP