成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

100%原生的JavaScript多線程和并行執行庫:Hamsters.js

開發 前端
Hamsters是一個能讓JavaScript代碼并行執行的原生庫,它可以讓你面向高性能的JavaScript編程,它是一個開源項目,Github上標星4k+。它的目的就是讓你更加容易的利用多線程的強大功能來并行編程實現性能的提升!

介紹

Hamsters是一個能讓JavaScript代碼并行執行的原生庫,它可以讓你面向高性能的JavaScript編程,它是一個開源項目,Github上標星4k+。它的目的就是讓你更加容易的利用多線程的強大功能來并行編程實現性能的提升!

[[275039]]

Github

https://github.com/austinksmith/Hamsters.js

特性

  • 多功能,通過跨多個線程來最大限度地提高性能。

[[275040]] 

  • 自動數據聚合,自動將問題分解成較小的部分,并與單個輸出并行執行。

[[275041]] 

  • 自動分類,按字母順序或數字自動排序輸出。

[[275042]] 

  • LEGACY 支持。

[[275043]] 

  • 備忘,計算一次后不再浪費 cpu 周期做同樣的工作

[[275044]] 

  • 開放源代碼,100%開源代碼庫,根據Artistic License 2.0發布

[[275045]] 

支持的環境

  • 所有主流瀏覽器、IE9 +

[[275046]] 

  • 現有 Web workers

[[275047]] 

  • Javascript shell 環境

100%原生的JavaScript多線程和并行執行庫——Hamsters.js 

  • React Native

[[275048]] 

  • Node.js
[[275049]]

如何使用?

安裝使用

  1. bower install WebHamsters 
  2. //OR 
  3. npm install hamsters.js 
  • 1、普通HTMl項目中使用 
  1. <!-- HTML4 and (x)HTML --> 
  2.  <script type="text/javascript" src="path/to/hamsters.js"
  3.  <!-- HTML5 --> 
  4.  <script src="path/to/hamsters.js"></script> 
  • 2、React Native
  1. import hamsters from 'path/to/hamsters'
  2.  import Worker from '...'
  3.  import hamsters from 'hamsters.js'
  4.  hamsters.init({ 
  5.  Worker: Worker 
  6.  }); 

  • 3、Nodejs
  1. var hamsters = require('hamsters.js'); 
  1. var Worker = require('...').Worker; 
  2.  var hamsters = require('hamsters.js'); 
  3.  hamsters.init({ 
  4.  Worker: Worker 
  5.  }); 
  • 4、入門使用

第一個要理解的是Hamsters.js是一個傳遞interfafce的消息,因此在使用庫調用函數時,我們需要通過將params對象(消息)傳遞給庫來指示庫如何操作。

  1. var params = { 
  2.  bar: 'foo' 
  3.  }; 
  4.  hamsters.run(params, ....); 

我們將使用的下一個參數將是我們想要在一個線程或線程中執行的邏輯,我們之前傳遞的params對象將在我們的函數的上下文中可訪問。現在應該能夠看到如何確保可以在線程中訪問變量和函數等不同的東西。

  1. hamsters.run(params, function() { 
  2. var foo = params.bar; 
  3. });  

第三個也是最后一個參數將是我們的onSuccess回調方法,此函數所需的唯一參數是輸出。

  1. hamsters.run(params, function() { 
  2.  var foo = params.bar; 
  3.  }, function(results) { 
  4.  console.log(results); 
  5.  }); 

回到原始的params對象,為了從庫中獲得最佳性能和可靠性,需遵循一些約定。Hamsters.js的構建目標是并行而不是并發,盡管庫很好地實現了并行執行的主要目標。由于這樣做的各種設計決策是為了幫助實現這一目標,其中一個決定是庫如何在線程之間分割數據以便執行,因此您希望在多個線程中訪問的任何數組必須在您的參數內具有數組索引賓語。

  1. var params = { 
  2.  array: [1, 2, 3, 4]; 
  3.  }; 
  4.  hamsters.run(params, function() { 
  5.  for(var i = 0; i < params.array; i++) { 
  6.  rtn.data.push(params.array[i] * 4); 
  7.  } 
  8.  }, function(results) { 
  9.  }); 

使用此約定,通過簡單地更改params對象中的一個選項,可以非常簡單地并行化上述方法。現在使用下面的方法,4個線程將完成相同的任務,每個線程僅在數組的一個數字上運行。

  1. var params = { 
  2.  array: [1, 2, 3, 4]; 
  3.  threads: 4 
  4.  }; 
  5.  hamsters.run(params, function() { 
  6.  for(var i = 0; i < params.array; i++) { 
  7.  rtn.data.push(params.array[i] * 4); 
  8.  } 
  9.  }, function(results) { 
  10.  }); 

更進一步,庫使用一個名為rtn的內部返回對象,這個rtn對象對于庫具有一致的方式來處理線程輸出是至關重要的。因此,當我們想要從線程返回一個值時,我們需要將結果推送到rtn.data數組中。或者你可以讓你的rtn.data輸出,但只有你的輸出已經是一個數組。

  1. hamsters.run(params, function() { 
  2.  rtn.data.push(params.bar); 
  3.  }, function(results) { 
  4.  console.log(results); // 'foo'
  5.  }); 

通過以上代碼來看下它傳遞的參數:

  1. var params = { 
  2.  threads: Integer
  3.  aggregate: Boolean, 
  4.  dataType: String, 
  5.  memoize: Boolean 
  6.  sort: String, 
  7.  }; 

1、threads這個可選參數將告訴庫執行先前聲明的函數的線程數,這允許在非常簡單的級別上更改您執行的線程數。如果您在此處未提供值,則庫默認值為1。

2、aggregate此可選參數將告訴庫我們是否要在執行后將各個線程輸出聚合在一起,這僅在您跨多個線程執行并且默認為相關時才相關false。

3、dataType此可選參數將通知庫我們的數據數組是JavaScript的類型化數組之一,在使用此參數時,庫將自動格式化輸出以匹配指定的輸出dataType。

4、memoize此可選參數旨在與memoization模式結合使用,當啟用memoization模式時,此參數允許用戶控制單個函數級別是否緩存該函數的結果,其默認值為false。

5、sort此可選參數將告訴庫按字母順序或數字順序自動對最終輸出進行排序,此參數的默認值為,null并且可以使用排序選項進行配置。

params對象中包含的任何其他內容都可以在線程的執行上下文或多個線程中訪問,具體取決于您使用庫的方式。

除了以上基本使用方式,你可以查看官方的相關文檔,有詳細的介紹和使用方式,如Promise、排序、memoization、可轉移對象、persistence、線程池、限制、設備等

總結

多線程和并行編程在Javascript中本身不是一件容易的事情,但是可借助第三方原生庫來彌補它,能讓你更加方便的進行多線程的編程,筆者可能并未介紹的非常清楚,如果你有這方面的需求,可以去查案Hamsters.js的相關文檔來體驗這種編程,希望對你有所幫助!

[[275050]]

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2021-09-09 07:16:00

C#多線程開發

2024-09-27 19:42:09

工具C#Task?

2024-09-29 16:22:18

多線程TaskC#

2010-04-27 17:23:34

AIX系統

2013-12-26 13:36:27

JavaScript技巧

2021-04-20 12:39:52

Node.js多線程多進程

2021-08-04 23:30:28

Node.js開發線程

2020-06-16 14:19:50

Javascript多線程編程

2009-03-12 10:52:43

Java線程多線程

2013-06-13 13:19:38

多線程

2021-09-11 15:26:23

Java多線程線程池

2023-10-26 21:44:02

Java多線程方法

2022-08-13 11:53:52

多線程內存

2012-11-12 09:26:06

.NET多線程

2019-03-29 16:40:02

Node.js多線程前端

2020-08-20 07:54:58

Node多線程解密

2013-06-06 10:53:39

Javascript裝載

2023-06-13 13:39:00

多線程異步編程

2019-10-29 20:13:43

Java技術程序員

2020-10-07 22:21:13

程序員技術線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级艳情片免费观看 | 日韩欧美高清 | 成人免费高清 | 国产精品高潮呻吟久久av野狼 | 久久r免费视频 | 国产精品中文字幕一区二区三区 | 黄色综合| www.成人在线视频 | 人人cao| 91国语清晰打电话对白 | 国产在线观看一区二区三区 | 亚洲精品久久久久久久久久久久久 | 免费在线精品视频 | 亚洲精品粉嫩美女一区 | 日韩乱码一二三 | 日韩在线视频一区 | 中文字幕一区二区三区日韩精品 | 日本高清中文字幕 | av福利网站 | 亚洲三区在线 | 国产综合av | 色伊人网 | 91av在线免费观看 | 久久久网| 91精品国产乱码久久久久久 | av一二三四 | 午夜电影网 | 婷婷久久五月 | 91免费高清 | 精品国产91乱码一区二区三区 | 欧美一级特黄aaa大片在线观看 | 99re在线 | jizz在线看片 | 精品国产一区二区三区久久 | 久久久国产精品一区 | 亚洲激精日韩激精欧美精品 | 欧美视频在线观看 | 伊人精品在线 | 91免费在线 | 亚洲欧美日韩国产综合 | 中文日韩在线视频 |