1. 程式人生 > >Tilera多執行緒網路程式設計總結

Tilera多執行緒網路程式設計總結

http://blog.csdn.net/zwleagle/article/details/8851400

http://blog.sina.com.cn/s/blog_a574f78401015v2o.html

http://www.dssz.com/1341360.html

http://www.dssz.com/1341355.html

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <netinet/in.h>
  7. #include <sys/socket.h>
  8. #include <sys/wait.h>
  9. #include <unistd.h>
  10. #include <arpa/inet.h>
  11. //#include <openssl/ssl.h>
  12. //#include <openssl/err.h>
  13. #include <fcntl.h>
  14. #include <sys/epoll.h>
  15. #include <sys/time.h>
  16. #include <sys/resource.h>
  17. #include <pthread.h>
  18. #include <assert.h>
  19. //#define DEBUG_TILERA
  20. #ifdef DEBUG_TILERA
  21. #include <tmc/alloc.h>
  22. #include <arch/cycle.h>
  23. #include <arch/spr.h>
  24. #include <tmc/cpus.h>
  25. #include <tmc/sync.h>
  26. #include <tmc/task.h>
  27. #endif
  28. /* These are non-NULL pointers that will result in page faults
     
  29. * under normal circumstances, used to verify that nobody uses 
  30. * non-initialized list entries. 
  31. */
  32. #define MAXBUF 1024
  33. #define MAXEPOLLSIZE 500000
  34. #define MAX_THREAD_NUMBER 200
  35. int  THREAD_NUMBER = 50;  
  36. int kdpfd;  
  37. struct epoll_event events[MAXEPOLLSIZE];  
  38. struct epoll_event thread_events[MAX_THREAD_NUMBER][MAXEPOLLSIZE];  
  39. int fdpool[MAX_THREAD_NUMBER] = {-1};  
  40. pthread_t  handle_receive_thrdid[MAX_THREAD_NUMBER];  
  41. int msgcount = 0;  
  42. int timecount = 0;  
  43. int count_packet= 0;  
  44. pthread_mutex_t connet_count_lock = PTHREAD_MUTEX_INITIALIZER;  
  45. int connect_count = 0;  
  46. pthread_mutex_t curfds_lock;  
  47. int curfds;  
  48. char buffer[MAX_THREAD_NUMBER][MAXBUF + 1];  
  49. pthread_t thread_count;  
  50. cpu_set_t cpus;  
  51. void BubbleSort(unsigned char R[],int n)  
  52. {  
  53.     int i,j;  
  54.     unsigned char temp;  
  55.     for (i=0; i<n-1; i++ )  
  56.     {  
  57.         for (j=n-2; j>=i; j--)  
  58.         {  
  59.             if (R[j]>R[j+1])  
  60.             {  
  61.                 temp=R[j];  
  62.                 R[j]=R[j+1];  
  63.                 R[j+1]=temp;  
  64.             }  
  65.         }  
  66.     }  
  67. }  
  68. /* 
  69. setnonblocking - 設定控制代碼為非阻塞方式 
  70. */
  71. int setnonblocking(int sockfd)  
  72. {  
  73.     if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1)  
  74.     {  
  75.         return -1;  
  76.     }  
  77.     return 0;  
  78. }  
  79. /* 
  80. handle_message - 處理每個 socket 上的訊息收發 
  81. */
  82. staticvoid *handle_count(void* arg)  
  83. {  
  84.     int precount, speed;  
  85.     while(1)  
  86.     {  
  87.         precount = msgcount;  
  88.         sleep(5);  
  89.         timecount += 5;  
  90.         //printf("The tcp connection count is %d\n",count_tcp);
  91.         //printf("The received packets count is %d, time %d\n",msgcount, timecount);
  92.         speed = msgcount - precount ;  
  93.         printf("The received speed  is %d/5seconds, connect %d, tatol packets %d\n",speed, connect_count, msgcount);  
  94.     }  
  95.     return NULL;  
  96. }  
  97. staticvoid * handl_receive_msg(void * arg)  
  98. {  
  99.     int fdind = 0;  
  100.     int nfds = 0;  
  101.     int len;  
  102.     struct epoll_event ev;  
  103.     int fdi;  
  104.     char* buf ;  
  105.     fdind = (int)arg;  
  106.     buf = (char*)&buffer[fdind];  
  107.     // printf("fd... %d \n", fdind);
  108.     while(1)  
  109.     {  
  110.         nfds = epoll_wait(fdpool[fdind], &thread_events[fdind][0], MAXEPOLLSIZE, -1);  
  111.         if (nfds == -1)  
  112.         {  
  113.             perror("epoll_wait");  
  114.             break;  
  115.         }  
  116.         for( fdi = 0; fdi < nfds; fdi++)  
  117.         {  
  118.             if((thread_events[fdind][fdi].events & EPOLLIN)  
  119.                /*&&(!(thread_events[fdind][fdi].events & EPOLLRDHUP))*/)  
  120.             {  
  121.                 while((-1 != (len = recv(thread_events[fdind][fdi].data.fd, buf, MAXBUF, 0)))  
  122.                       ||((-1 == len) && (EAGAIN != errno)))  
  123.                 {  
  124.                     

    相關推薦

    Tilera執行網路程式設計總結

    http://blog.csdn.net/zwleagle/article/details/8851400 http://blog.sina.com.cn/s/blog_a574f78401015v2o.html http://www.dssz.com/13413

    執行處理執行網路程式設計問題

    1、 一個伺服器,多個客戶端訪問。 2、多個伺服器多執行緒接收多個客戶端,但是埠號是固定的。 java 網路程式設計之TCP +多執行緒 + 執行緒池 資料: https://blog.csdn.net/tanghui270270/article/details/80603199

    Linux C: 基於C/S的執行網路程式設計 2 (客戶端)

    客戶端: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/type

    學了Java併發程式設計藝術及執行核心程式設計技術,以及最開始學的程式設計思想那本書,今天做些總結

    併發Map分析位碼shift預設值是28,對hash值右移28位,取高四位,獲得segments位置,掩碼mask預設值16-1,作一個與值,不知道有何用處,兩個都是不可修改,初始值和併發度有關,一旦確立下來決定了segments陣列大小,包括segments陣列物件不可修改

    Java執行學習與總結(Join)

    join()方法的用法: join()是主執行緒 等待子執行緒的終止。也就是在子執行緒呼叫了 join() 方法後面的程式碼,只有等到子執行緒結束了才能執行。 例子如下: Java程式碼 p

    Java執行學習與總結(ThreadGroup)

    在Java中每個執行緒都屬於某個執行緒組(ThreadGroup)。例如,如果在main()中產生一個執行緒,則這個執行緒屬於main執行緒組管理的一員,您可以使用下面的指令來獲得目前執行緒所屬的執行緒組名稱: Java程式碼

    網際網路架構執行併發程式設計高階教程(上)

    #基礎篇幅:執行緒基礎知識、併發安全性、JDK鎖相關知識、執行緒間的通訊機制、JDK提供的原子類、併發容器、執行緒池相關知識點  #高階篇幅:ReentrantLock原始碼分析、對比兩者原始碼,更加深入理解讀寫鎖,JAVA記憶體模型、先行發生原則、指令重排序 #環境說明:idea、ja

    關於執行相關問題總結一下

    程序和執行緒、多執行緒 程序是程式執行的基本單位,執行緒是程序中的基本單位; 執行緒共享一塊記憶體和系統資源,執行緒之間切換開銷相對程序較小;執行緒也被稱為輕量級程序; 各程序之間是獨立的,各執行緒之間則不是,程序之間屬於作業系統範疇 多執行緒其實是幾乎同時執行

    執行單元測試總結

    多執行緒單元測試 pom配置 <!--springmvc中進行多執行緒測試--> <dependency> <groupId>net.sourceforge.groboutils</groupId>

    執行基礎知識總結

      0、併發和並行、程序核線程、多程序和多執行緒的區別:   (這裡的時間和時刻上的概念同物理上的一樣)   併發:在一段時間內多個任務同時執行,或者說是在一段很短的時間內可以執行多條程式指令,微觀上看起來好像是可以同時執行多個程序,單核處理器就可以做到。   並行:在同一時刻多個任務同時執行,或者說是

    關於執行的小總結

    對於知識學習的時候,儘量瞭解一下底層的東西,這樣就會對自己學習非常有用,下面我來介紹一下自己所理解的系統性的多執行緒。 首先從cpu開始,cpu訪問本地記憶體,獲得主記憶體中共享變數的拷貝,然後通過緩衝區將改變的值寫入進去,注意是批處理的寫入到主記憶體當中,運用批處理的方式

    java執行網路伺服器端向客戶端傳送檔案

    tcpServer.java package com.tcp.server; import java.io.IOException; import java.net.ServerSocket; im

    boost庫執行(Thread)程式設計(執行操作,互斥體mutex,條件變數)

    轉載地址: 1 建立執行緒 就像std::fstream類就代表一個檔案一樣,boost::thread類就代表一個可執行的執行緒。預設建構函式建立一個代表當前執行執行緒的例項。一個過載的建構函式以一個不需任何引數的函式物件作為引數,並且沒有返回值。這個建構函式建立

    程序間通訊方式和執行同步機制總結

    多程序之間通訊方式:           檔案對映:本地之間           共享記憶體:本地之間           匿名管道:本地之間           命名管道:跨伺服器           郵件槽:一對多的傳輸資料,通常通過網路向一臺Windo

    NSURLSession和執行網路之GCD簡單介紹(任務,佇列)

    NSURLConnection是2003年伴隨著Safari一起發行的網路開發API,距今已經有十一年。當然,在這十一年間它表現的相當優秀,有大量的應用基礎,這也是為什麼前面花了那麼長時間對它進行詳細介紹的原因。但是這些年伴隨著iPhone、iPad的發展,對於NSURL

    Java8學習計劃--關於執行併發程式設計-Java8-CompletableFuture 1的介紹

    零零散散接近一個月的課餘時間,學完Java8InAction和Guava,感觸很多,收穫也很大,特別開心,接下來會利用空餘時間學習Spark,希望自己在技術上慢慢積累,越來越從容。對於Java8 最大的改變是lambda表示式 Collecotors CompletableF

    java執行第一篇——執行基礎知識點總結

    程序與執行緒一個正在作業系統中執行的 exe 程式理解成一個“程序”,執行緒可以理解成是在程序中獨立執行的子任務。一個QQ.exe 執行時是一個程序, 其中:好友視訊執行緒、下載檔案執行緒、傳輸資料執行緒、傳送表 情執行緒等。  2.main方法是一個執行緒3.執行緒是一個子

    iOS【執行網路之圖片下載框架之SDWebImage】

    效果: 程式碼: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pat

    Android studio 執行網路檔案下載

    執行結果 檔案結構 主要程式碼 MainActivity package cn.edu.sicnu.threadfiledownload; import android.app.ProgressDialog; impor