<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          并發(fā)模擬的四種方式 + 工具,超級實用!

          共 4329字,需瀏覽 9分鐘

           ·

          2022-01-06 18:37

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質文章,第一時間送達

          并發(fā)模擬的四種方式


          -? ? ?一、Postman?? -

          Postman是一個款http請求模擬工具

          首先演示一下postman最基本的使用
          創(chuàng)建一個Springboot項目,測試的代碼如下:

          import?org.springframework.web.bind.annotation.GetMapping;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RestController;

          @RestController
          @RequestMapping("test")
          public?class?TestConrtoller?{

          ????@GetMapping("demo")
          ????public?String?testDemo()?{
          ????????return?"result~";
          ????}
          }


          為了便于操作,一般會將

          http://127.0.0.1:8080 是經常使用的地址+端口號,可以設置為環(huán)境

          點擊右上角的設置圖標

          選擇global

          輸入信息

          以后再進行測試就能這樣搞簡寫了

          知道基本使用之后,我們來看一下如何模擬并發(fā)測試



          填寫基本信息后,創(chuàng)建

          這個時候會創(chuàng)建出Concurrency的文件夾,我們可以把剛才測試的demo的例子放進這個文件夾下



          這個時候就可以在Concurrency下看到這個接口測試了

          選擇并發(fā)測試:

          這個時候彈出我們想要的框了

          點擊Run Concurrency

          你可以立馬感覺到CPU在“燃燒”,因為要記錄并打印日志,顯示的話是一條一條來的,其實測試的速度,要比你看到的打印的日志的速度快,綠色表示正常


          -? ? ?二、Apache Bench(AB)?? -

          ApacheBench 是 Apache 服務器自帶的一個web壓力測試工具,簡稱ab。

          ab又是一個命令行工具,對發(fā)起負載的本機要求很低,根據(jù)ab命令可以創(chuàng)建很多的并發(fā)訪問線程,模擬多個訪問者同時對某一URL地址進行訪問,因此可以用來測試目標服務器的負載壓力。總的來說ab工具小巧簡單,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監(jiān)控。

          使用的話,首先需要安裝Apache服務器

          網站:傳送門 http://httpd.apache.org/download.cgi

          因為我的操作系統(tǒng)是windows10, 這里選擇File for Microsoft Windows

          Linux下的安裝是非常簡單的,這里不再演示


          選擇 ApacheHaus

          進入下載頁面 選擇適合自己電腦的版本

          文件解壓到本地文件夾下,如果不是解壓在c盤,需要設置參數(shù),注意文件路徑最好都是英文

          關于需要設置參數(shù),conf->httpd.conf 使用文本編輯器打開,

          需要修改的有三個地方:


          運行根目錄,修改成自己解壓到本地的路徑

          監(jiān)聽端口,默認監(jiān)聽端口是80,如果已被使用會報錯需要修改,如果80端口未被使用,可不修改;如果修改了監(jiān)聽端口,則需要把ServerName localhost也相應改成同樣的端 口號


          DocumentRoot 測試文件存放地,且該目錄必須存在

          配置完成后,命令行cmd進入D:\softUtil\Apache24\bin目錄下

          httpd.exe??-k??install


          啟動:

          httpd.exe?-k?start

          測試:

          -n :請求數(shù)
          -c: 并發(fā)數(shù)


          -? ? ?三、并發(fā)模擬工具JMeter?? -

          JMeter也是一款性能測試工具,是圖形化的。

          下載地址:傳送門 http://jmeter.apache.org/


          需要Java8+的環(huán)境

          解壓到你覺得合適的目錄下(注意最好是英文路徑)
          進入它的bin目錄下 啟動jmeter.bat即可

          使用很簡單,首先在測試計劃部分新建一個線程組



          設置好基礎信息后添加HTTP請求(基本信息設置好沒有OK哈,直接添加HTTP請求)

          填寫HTTP請求相關的內容

          之后還要添加監(jiān)聽器,這里選擇是圖形結果

          再添加一個查看結果樹吧

          在運行之前打開log Viewer

          下面開始運行:

          執(zhí)行成功,來感受一下結果:

          點進去

          查看結果樹


          -? ? ?四、代碼模擬?? -

          這里需要用到一個類,就是CountDownLatch。

          CountDownLatch是一個計數(shù)器閉鎖,通過它可以完成類似于阻塞當前線程的功能,即:一個線程或多個線程一直等待,直到其他線程執(zhí)行的操作完成。

          CountDownLatch用一個給定的計數(shù)器來初始化,該計數(shù)器的操作是原子操作,即同時只能有一個線程去操作該計數(shù)器。調用該類await方法的線程會一直處于阻塞狀態(tài),直到其他線程調用countDown方法使當前計數(shù)器的值變?yōu)榱?,每次調用countDown計數(shù)器的值減1。當計數(shù)器值減至零時,所有因調用await()方法而處于等待狀態(tài)的線程就會繼續(xù)往下執(zhí)行。這種現(xiàn)象只會出現(xiàn)一次,因為計數(shù)器不能被重置。

          下圖和它的方法可以體現(xiàn)出來:

          CountDownLatch類只提供了一個構造器:

          public?CountDownLatch(int?count)?{??};??//參數(shù)count為計數(shù)值

          然后下面這3個方法是CountDownLatch類中最重要的方法(上圖能夠反映出來)

          public?void?await()?throws?InterruptedException?{?};???//調用await()方法的線程會被掛起,它會等待直到count值為0才繼續(xù)執(zhí)行
          public?boolean?await(long?timeout,?TimeUnit?unit)?throws?InterruptedException?{?};??//和await()類似,只不過等待一定的時間后count值還沒變?yōu)?的話就會繼續(xù)執(zhí)行
          public?void?countDown()?{?};??//將count值減1

          下面還需要看一個類Semaphore

          Semaphore與CountDownLatch相似,不同的地方在于Semaphore的值被獲取到后是可以釋放的,并不像CountDownLatch那樣一直減到底。

          它也被更多地用來限制流量,類似閥門的 功能。如果限定某些資源最多有N個線程可以訪問,那么超過N個主不允許再有線程來訪問,同時當現(xiàn)有線程結束后,就會釋放,然后允許新的線程進來。有點類似于鎖的lock與 unlock過程。相對來說他也有兩個主要的方法:

          用于獲取權限的acquire(),其底層實現(xiàn)與CountDownLatch.countdown()類似;
          用于釋放權限的release(),其底層實現(xiàn)與acquire()是一個互逆的過程。

          通過這兩個類可以進行并發(fā)的模擬:

          測試一下:

          import?lombok.extern.slf4j.Slf4j;

          import?java.util.concurrent.*;

          @Slf4j
          public?class?CuncurrencyTest?{

          ????//?請求總數(shù)
          ????public?static?int?clientTotal?=?5000;

          ????//?同時并發(fā)執(zhí)行的線程總數(shù)
          ????public?static?int?threadTotal?=?200;

          ????public?static?int?count?=?0;

          ????public?static?void?main(String[]?args)?throws?InterruptedException?{
          ????????//?定義線程池
          ????????ExecutorService?executorService?=?Executors.newCachedThreadPool();
          ????????//?定義信號量?最大的線程數(shù)量
          ????????final?Semaphore?semaphore?=?new?Semaphore(threadTotal);
          ????????final?CountDownLatch?countDownLatch?=?new?CountDownLatch(clientTotal);

          ????????for?(int?i?=?0;?i?????????????executorService.execute(()?->?{
          ????????????????try?{
          ????????????????????semaphore.acquire();
          ????????????????????add();
          ????????????????????semaphore.release();
          ????????????????}?catch?(InterruptedException?e)?{
          ????????????????????e.printStackTrace();
          ????????????????????log.error("exception",e);
          ????????????????}
          ????????????????countDownLatch.countDown();
          ????????????});
          ????????}
          ????????countDownLatch.await();
          ????????executorService.shutdown();
          ????????log.info("count:{}",count);

          ????}

          ????private?static?void??add()?{
          ????????count++;
          ????}
          }

          因為count不是線程安全的,且沒有作防護措施,結果是錯的

          上面是對代碼的并發(fā)模擬的簡單形式,值得注意的是,這里提到的兩個類不是專門做并發(fā)模擬,它們的用途很廣泛,等之后更新Java網絡編程的東西的時候,還會詳細介紹它們。


          作者:沉曉

          來源:csdn.net/qq_42322103/article/details/102736170

          加鋒哥微信:?java1239??
          圍觀鋒哥朋友圈,每天推送Java干貨!

          瀏覽 72
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99精品少妇 | 无人无码深夜久久 | 久久久精品少妇视频 | 欧美性交成人网站 | 亚洲在线电影院日韩 |