版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

174 строки
5.6 KiB

  1. import { MessagePort, Worker } from 'worker_threads';
  2. import { EventEmitter } from 'events';
  3. import { AsyncResource } from 'async_hooks';
  4. declare const kEventEmitter: unique symbol;
  5. declare const kAsyncResource: unique symbol;
  6. declare type EventEmitterOptions = typeof EventEmitter extends {
  7. new (options?: infer T): EventEmitter;
  8. } ? T : never;
  9. declare type AsyncResourceOptions = typeof AsyncResource extends {
  10. new (name: string, options?: infer T): AsyncResource;
  11. } ? T : never;
  12. declare type Options$1 = EventEmitterOptions & AsyncResourceOptions & {
  13. name?: string;
  14. };
  15. declare class EventEmitterReferencingAsyncResource extends AsyncResource {
  16. [kEventEmitter]: EventEmitter;
  17. constructor(ee: EventEmitter, type: string, options?: AsyncResourceOptions);
  18. get eventEmitter(): EventEmitter;
  19. }
  20. declare class EventEmitterAsyncResource extends EventEmitter {
  21. [kAsyncResource]: EventEmitterReferencingAsyncResource;
  22. constructor(options?: Options$1 | string);
  23. emit(event: string | symbol, ...args: any[]): boolean;
  24. emitDestroy(): void;
  25. asyncId(): number;
  26. triggerAsyncId(): number;
  27. get asyncResource(): EventEmitterReferencingAsyncResource;
  28. static get EventEmitterAsyncResource(): typeof EventEmitterAsyncResource;
  29. }
  30. interface StartupMessage {
  31. filename: string | null;
  32. name: string;
  33. port: MessagePort;
  34. sharedBuffer: Int32Array;
  35. useAtomics: boolean;
  36. }
  37. interface RequestMessage {
  38. taskId: number;
  39. task: any;
  40. filename: string;
  41. name: string;
  42. }
  43. interface ReadyMessage {
  44. ready: true;
  45. }
  46. interface ResponseMessage {
  47. taskId: number;
  48. result: any;
  49. error: unknown | null;
  50. }
  51. interface TinypoolPrivateData {
  52. workerId: number;
  53. }
  54. declare type TinypoolData = [TinypoolPrivateData, any];
  55. declare const kTransferable: unique symbol;
  56. declare const kValue: unique symbol;
  57. declare const kQueueOptions: unique symbol;
  58. declare function isTransferable(value: any): boolean;
  59. declare function isMovable(value: any): boolean;
  60. declare function markMovable(value: object): void;
  61. interface Transferable {
  62. readonly [kTransferable]: object;
  63. readonly [kValue]: object;
  64. }
  65. interface Task {
  66. readonly [kQueueOptions]: object | null;
  67. }
  68. interface TaskQueue {
  69. readonly size: number;
  70. shift(): Task | null;
  71. remove(task: Task): void;
  72. push(task: Task): void;
  73. }
  74. declare function isTaskQueue(value: any): boolean;
  75. declare const kRequestCountField = 0;
  76. declare const kResponseCountField = 1;
  77. declare const kFieldCount = 2;
  78. declare global {
  79. namespace NodeJS {
  80. interface Process {
  81. __tinypool_state__: {
  82. isWorkerThread: boolean;
  83. workerData: any;
  84. workerId: number;
  85. };
  86. }
  87. }
  88. }
  89. interface AbortSignalEventTargetAddOptions {
  90. once: boolean;
  91. }
  92. interface AbortSignalEventTarget {
  93. addEventListener: (name: 'abort', listener: () => void, options?: AbortSignalEventTargetAddOptions) => void;
  94. removeEventListener: (name: 'abort', listener: () => void) => void;
  95. aborted?: boolean;
  96. }
  97. interface AbortSignalEventEmitter {
  98. off: (name: 'abort', listener: () => void) => void;
  99. once: (name: 'abort', listener: () => void) => void;
  100. }
  101. declare type AbortSignalAny = AbortSignalEventTarget | AbortSignalEventEmitter;
  102. declare type ResourceLimits = Worker extends {
  103. resourceLimits?: infer T;
  104. } ? T : {};
  105. declare type EnvSpecifier = typeof Worker extends {
  106. new (filename: never, options?: {
  107. env: infer T;
  108. }): Worker;
  109. } ? T : never;
  110. interface Options {
  111. filename?: string | null;
  112. name?: string;
  113. minThreads?: number;
  114. maxThreads?: number;
  115. idleTimeout?: number;
  116. terminateTimeout?: number;
  117. maxQueue?: number | 'auto';
  118. concurrentTasksPerWorker?: number;
  119. useAtomics?: boolean;
  120. resourceLimits?: ResourceLimits;
  121. argv?: string[];
  122. execArgv?: string[];
  123. env?: EnvSpecifier;
  124. workerData?: any;
  125. taskQueue?: TaskQueue;
  126. trackUnmanagedFds?: boolean;
  127. isolateWorkers?: boolean;
  128. }
  129. interface FilledOptions extends Options {
  130. filename: string | null;
  131. name: string;
  132. minThreads: number;
  133. maxThreads: number;
  134. idleTimeout: number;
  135. maxQueue: number;
  136. concurrentTasksPerWorker: number;
  137. useAtomics: boolean;
  138. taskQueue: TaskQueue;
  139. }
  140. interface RunOptions {
  141. transferList?: TransferList;
  142. filename?: string | null;
  143. signal?: AbortSignalAny | null;
  144. name?: string | null;
  145. }
  146. declare type TransferList = MessagePort extends {
  147. postMessage(value: any, transferList: infer T): any;
  148. } ? T : never;
  149. declare type TransferListItem = TransferList extends (infer T)[] ? T : never;
  150. declare class Tinypool extends EventEmitterAsyncResource {
  151. #private;
  152. constructor(options?: Options);
  153. run(task: any, options?: RunOptions): Promise<any>;
  154. destroy(): Promise<void>;
  155. get options(): FilledOptions;
  156. get threads(): Worker[];
  157. get queueSize(): number;
  158. get completed(): number;
  159. get duration(): number;
  160. static get isWorkerThread(): boolean;
  161. static get workerData(): any;
  162. static get version(): string;
  163. static move(val: Transferable | TransferListItem | ArrayBufferView | ArrayBuffer | MessagePort): MessagePort | ArrayBuffer | Transferable | ArrayBufferView;
  164. static get transferableSymbol(): symbol;
  165. static get valueSymbol(): symbol;
  166. static get queueOptionsSymbol(): symbol;
  167. }
  168. declare const _workerId: number;
  169. export { Options, ReadyMessage, RequestMessage, ResponseMessage, StartupMessage, Task, TaskQueue, Tinypool, TinypoolData, TinypoolPrivateData, Transferable, Tinypool as default, isMovable, isTaskQueue, isTransferable, kFieldCount, kQueueOptions, kRequestCountField, kResponseCountField, kTransferable, kValue, markMovable, _workerId as workerId };