<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      關于多線程的介紹

      一、進程與線程

      1.進程:

      進程是操作系統中一種非常重要的軟件資源,當我們把一個可執行程序exe運行起來的時候,系統就會隨之創建一個進程,如果這個程序結束系統會隨之銷毀對應的進程。

      當運行exe文件時,exe文件中的很多內容都加載到內存中,通過分配資源來執行這個程序包含的指令的過程叫做進程。

      2.線程: 

      線程其實是一種輕量級的進程,一個進程中包含多個線程,每個線程都有一段自己的執行邏輯,每個線程都是一個獨立的執行流。

      3.進程與線程的區別:

      進程是操作系統分配資源的最小單位,線程是任務調動和執行的最小單位

      一個操作系統中可以運行多個進程,一個進程中有多個線程同時執行

      系統在運行時會為每個進程分配內存,系統不會單獨為每個線程分配內存

      創建進程時系統會自動創建一個主線程由主線程完成,進程中有多線程時,由多線程共同執行完成

       

      二、多線程的作用

      1.多線程的作用:

      可以解決負載均衡問題,充分利用CPU的資源,為了提高Cpu的使用,采用多線程的方法去同時完成幾件事情而互不干擾
      2.使用場景:

      大多數的情況下, 使用多線程 主要是需要處理大量的IO操作或處理的情況需要花大量的時間等
      3.用戶體驗

      揮多核處理器的優勢,并發執行讓系統運行的更快、更流暢,用戶體驗更好

       

      三、多線程的實現

      1. java實現

      (1)創建一個繼承于Thread類的子類
      (2)重寫Thread類的run() --> 將此線程執行的操作聲明在run()中
      (3)創建Thread類的子類的對象
      (3)通過此對象調用start()

      package TestJava.Advanced;
      
      //第一步:繼承Thread
      public class ThreadDemo extends Thread  {
      
          //票數
          private static Integer ticketNums = 0;
      
          @Override
          //第二步:重寫run方法
          public void run(){
              for (int i = 0; i < 1000; i++) {
                  System.out.println("當前正在運行子線程---第"+i+"次");
              }
          }
      
          public static void main(String[] args){
              //第三步:創建一個線程對象
              ThreadDemo threadDemo = new ThreadDemo();
              //第四步:調用start()啟動線程
              threadDemo.start();
              for (int i = 0; i < 1000; i++) {
                  System.out.println("正在運行主線程---第"+i+"次");
      
              }
      
          }
      }

      查看運行的結果,主線程與子線程并行執行:

       

      2. python實現

      1)定義線程方法
      def thread_1():
      def thread_2():

      2)定義線程
      thread1 = threading.Thread(target = thread_1)
      thread2 = threading.Thread(target = thread_2)

      3)啟動線程
      thread1.start()
      thread2.start()

      4)等待線程執行完畢
      thread1.join()
      thread2.join()

      5)具體的代碼實現

      import datetime
      import threading
      import time
      import requests
      
      start_time = datetime.datetime.now()
      print("開始時間:",start_time)
      
      def thread_1():
          start1_time = datetime.datetime.now()
          print("線程1開始時間:", start1_time)
          url = "http://192.168.37.8:7777/api/mytest2"
          data1 = requests.post(url).text
          #print(data1)
          time.sleep(2)
          end1_time = datetime.datetime.now()
          print("線程1結束時間", end1_time)
      
      def thread_2():
          start2_time = datetime.datetime.now()
          print("線程2開始時間:", start2_time)
          url2 = "http://192.168.37.8:7777/api/mytest"
          data2 = requests.get(url2).text
          #print(data2)
          time.sleep(2)
          end2_time = datetime.datetime.now()
          print("線程2結束時間", end2_time)
      
      
      thread1 = threading.Thread(target = thread_1)
      thread2 = threading.Thread(target = thread_2)
      
      thread1.start()
      thread2.start()
      
      thread1.join()
      thread2.join()
      
      end_time = datetime.datetime.now()
      print("結束時間",end_time)
      time_need = (end_time - start_time ).seconds
      print("耗時豪秒數:",time_need)

      查看程序的運行:

      3.golang實現

      Go 語言支持并發,我們只需要通過 go 關鍵字來開啟 goroutine 即可。
      goroutine 是輕量級線程,goroutine 的調度是由 Golang 運行時進行管理的。
      語句:go f(x, y, z)
      如:開啟一個新的 goroutine:
      f(x, y, z)
      具體的實現如下:
      package main
       
      import (
      "fmt"
      "time"
      )
       
      func say(s string) {
      for i := 0; i < 5; i++ {
      time.Sleep(100 * time.Millisecond)
      fmt.Println(s)
      }
      }
       
      func main() {
      go say("world")
      say("hello")
      }

      查看運行結果:

       

      四、不同語言多線程使用中的區別:

      1.python:

      在Python中,可以使用多線程,但不要指望能有效利用多核。如果一定要通過多線程利用多核,那只能通過C擴展來實現,不過這樣就失去了Python簡單易用的特點

      2.java:

      重寫run方法:使用繼承方式的好處是,在run()方法內獲取當前線程直接使用this就可以了,無須使用Thread.currentThread()方法;不好的地方是Java不支持多繼承,如果繼承了Thread類,那么就不能再繼承其他類。另外任務與代碼沒有分離,當多個線程執行一樣的任務時需要多份任務代碼,而實現run方法:解決繼承Thread的缺點,沒有返回值
      3.c#

      一個進程可以創建一個或多個線程以執行與該進程關聯的部分程序代碼。在C#中,線程是使用Thread類處理的,該類在System.Threading命名空間中。使用Thread類創建線程時,只需要提供線程入口,線程入口告訴程序讓這個線程做什么

       

      posted @ 2024-02-15 16:52  Mrwhite86  閱讀(93)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲欧美不卡高清在线| 最近免费中文字幕大全| 国产情侣激情在线对白| 久久大香萑太香蕉av黄软件| 久在线视频播放免费视频| 欧洲美熟女乱又伦免费视频 | 干老熟女干老穴干老女人| 国产精品午夜福利91| 国产午夜精品福利视频| 激情综合网激情综合| 久久精品这里热有精品| 日本熟妇XXXX潮喷视频| 国产成人无码AV片在线观看不卡| 久久精品国产亚洲夜色AV网站| 亚洲成人av综合一区| 日本夜爽爽一区二区三区| 成人午夜在线观看日韩| 中文字幕结果国产精品| 日韩精品成人区中文字幕| 久久精品国产99久久无毒不卡| 无套后入极品美女少妇| 亚洲一区二区av免费| 国产午夜福利精品久久不卡| 粉嫩小泬无遮挡久久久久久| 国内偷自第一区二区三区| 白白发布视频一区二区视频| 少妇尿尿一区二区在线免费| 欧美肥老太交视频免费| a级黑人大硬长爽猛出猛进| 国产精品黄色片| 永久免费无码av在线网站| 成人av亚洲男人色丁香| 国产乱子伦一区二区三区视频播放| 亚洲国产午夜福利精品| 人妻加勒比系列无码专区| 久久人妻精品国产| 99精品人妻少妇一区| 九九热在线精品视频观看| 中文区中文字幕免费看| 国产免费午夜福利在线播放| 久久人人97超碰爱香蕉|