gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 line
2.4KB

  1. /*-------------------------------------------------------------------------
  2. *
  3. * parallel.h
  4. * Infrastructure for launching parallel workers
  5. *
  6. * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
  7. * Portions Copyright (c) 1994, Regents of the University of California
  8. *
  9. * src/include/access/parallel.h
  10. *
  11. *-------------------------------------------------------------------------
  12. */
  13. #ifndef PARALLEL_H
  14. #define PARALLEL_H
  15. #include "access/xlogdefs.h"
  16. #include "lib/ilist.h"
  17. #include "postmaster/bgworker.h"
  18. #include "storage/shm_mq.h"
  19. #include "storage/shm_toc.h"
  20. typedef void (*parallel_worker_main_type) (dsm_segment *seg, shm_toc *toc);
  21. typedef struct ParallelWorkerInfo
  22. {
  23. BackgroundWorkerHandle *bgwhandle;
  24. shm_mq_handle *error_mqh;
  25. int32 pid;
  26. } ParallelWorkerInfo;
  27. typedef struct ParallelContext
  28. {
  29. dlist_node node;
  30. SubTransactionId subid;
  31. int nworkers;
  32. int nworkers_launched;
  33. char *library_name;
  34. char *function_name;
  35. ErrorContextCallback *error_context_stack;
  36. shm_toc_estimator estimator;
  37. dsm_segment *seg;
  38. void *private_memory;
  39. shm_toc *toc;
  40. ParallelWorkerInfo *worker;
  41. int nknown_attached_workers;
  42. bool *known_attached_workers;
  43. } ParallelContext;
  44. typedef struct ParallelWorkerContext
  45. {
  46. dsm_segment *seg;
  47. shm_toc *toc;
  48. } ParallelWorkerContext;
  49. extern volatile bool ParallelMessagePending;
  50. extern PGDLLIMPORT int ParallelWorkerNumber;
  51. extern PGDLLIMPORT bool InitializingParallelWorker;
  52. #define IsParallelWorker() (ParallelWorkerNumber >= 0)
  53. extern ParallelContext *CreateParallelContext(const char *library_name,
  54. const char *function_name, int nworkers);
  55. extern void InitializeParallelDSM(ParallelContext *pcxt);
  56. extern void ReinitializeParallelDSM(ParallelContext *pcxt);
  57. extern void LaunchParallelWorkers(ParallelContext *pcxt);
  58. extern void WaitForParallelWorkersToAttach(ParallelContext *pcxt);
  59. extern void WaitForParallelWorkersToFinish(ParallelContext *pcxt);
  60. extern void DestroyParallelContext(ParallelContext *pcxt);
  61. extern bool ParallelContextActive(void);
  62. extern void HandleParallelMessageInterrupt(void);
  63. extern void HandleParallelMessages(void);
  64. extern void AtEOXact_Parallel(bool isCommit);
  65. extern void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId);
  66. extern void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end);
  67. extern void ParallelWorkerMain(Datum main_arg);
  68. #endif /* PARALLEL_H */
上海开阖软件有限公司 沪ICP备12045867号-1