@wazir-dev/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,847 @@
1
+ # Concurrency & Parallelism -- Performance Expertise Module
2
+
3
+ > Concurrency is the composition of independently executing tasks; parallelism is their simultaneous execution on multiple processing units. Confusing them is the single most common source of performance anti-patterns in modern software. Choosing the wrong model for your workload can mean a 10-20x throughput loss, while choosing correctly can yield 3-8x speedups with minimal code changes.
4
+
5
+ > **Impact:** Critical
6
+ > **Applies to:** All (Backend, Web, Mobile, Infrastructure, Data Processing)
7
+ > **Key metrics:** Throughput (req/s), Latency (p50/p95/p99), CPU Utilization (%), Context Switch Rate, Lock Contention Rate, Thread Pool Queue Depth
8
+
9
+ ---
10
+
11
+ ## Table of Contents
12
+
13
+ 1. [Concurrency vs Parallelism: The Distinction That Matters](#concurrency-vs-parallelism-the-distinction-that-matters)
14
+ 2. [Async I/O Models](#async-io-models)
15
+ 3. [Thread Pools and Process Pools](#thread-pools-and-process-pools)
16
+ 4. [Amdahl's Law: The Math of Diminishing Returns](#amdahls-law-the-math-of-diminishing-returns)
17
+ 5. [Lock-Free Data Structures and Atomic Operations](#lock-free-data-structures-and-atomic-operations)
18
+ 6. [The Actor Model](#the-actor-model)
19
+ 7. [Parallel Algorithms](#parallel-algorithms)
20
+ 8. [Common Bottlenecks](#common-bottlenecks)
21
+ 9. [Anti-Patterns](#anti-patterns)
22
+ 10. [Race Conditions, Deadlocks, and Debugging](#race-conditions-deadlocks-and-debugging)
23
+ 11. [Before/After: Sequential vs Parallel Speedups](#beforeafter-sequential-vs-parallel-speedups)
24
+ 12. [Decision Tree: Threads, Async, or Processes?](#decision-tree-threads-async-or-processes)
25
+ 13. [Sources](#sources)
26
+
27
+ ---
28
+
29
+ ## Concurrency vs Parallelism: The Distinction That Matters
30
+
31
+ ### Definitions
32
+
33
+ **Concurrency** is a structural property of a program: multiple tasks can be in progress at the same time, their execution may interleave, but they do not necessarily run simultaneously. A single-core CPU runs concurrent tasks by switching between them rapidly.
34
+
35
+ **Parallelism** is a runtime property: multiple tasks execute at literally the same instant on separate processing units (cores, CPUs, GPUs, machines). Parallelism requires hardware support; concurrency requires only program design.
36
+
37
+ Rob Pike's formulation: "Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once."
38
+
39
+ ### Performance Implications
40
+
41
+ | Dimension | Concurrency | Parallelism |
42
+ |-----------|-------------|-------------|
43
+ | Primary benefit | Improved throughput for I/O-bound work | Reduced latency for CPU-bound work |
44
+ | Hardware requirement | Single core sufficient | Multiple cores required |
45
+ | Scaling ceiling | I/O bandwidth | Core count (Amdahl's Law) |
46
+ | Overhead source | Context switching, scheduling | Synchronization, data partitioning |
47
+ | Typical speedup (I/O-heavy) | 10-100x over sequential | Marginal improvement |
48
+ | Typical speedup (CPU-heavy) | No improvement (may worsen) | 2-8x on 8-core system |
49
+
50
+ ### When Each Approach Wins
51
+
52
+ **Concurrency wins** when the workload is I/O-bound: web servers handling HTTP requests, database query dispatch, file I/O, network calls. A Node.js event loop handles 10,000+ concurrent connections on a single thread because nearly all time is spent waiting for I/O, not computing.
53
+
54
+ **Parallelism wins** when the workload is CPU-bound: image processing, video encoding, numerical simulation, data transformation pipelines. Splitting a 4-second computation across 4 cores yields approximately 1 second of wall time.
55
+
56
+ **Both together** win for mixed workloads: a web server (concurrent request handling) that performs image resizing (parallel computation) per request.
57
+
58
+ ### Hardware Context (2025)
59
+
60
+ Desktop processors commonly feature 8-16 cores. Server processors offer 64-128 cores (AMD EPYC 9004 series: up to 128 cores/256 threads). ARM-based designs like Apple M-series and Ampere Altra use heterogeneous core architectures (performance + efficiency cores) that affect parallelism strategies. Source: [Uplatz Comparative Analysis](https://uplatz.com/blog/a-comparative-analysis-of-modern-concurrency-models-architecture-performance-and-application/)
61
+
62
+ ---
63
+
64
+ ## Async I/O Models
65
+
66
+ ### Event Loop (Node.js, Browser JavaScript)
67
+
68
+ Node.js uses a single-threaded event loop backed by libuv. All JavaScript executes on one thread; I/O operations are delegated to the OS kernel (epoll on Linux, kqueue on macOS, IOCP on Windows) and completed asynchronously.
69
+
70
+ **Architecture:**
71
+ ```
72
+ Main Thread (V8) libuv Thread Pool (4 default)
73
+ | |
74
+ |--- setTimeout ---------> Timer heap
75
+ |--- fs.readFile --------> Worker thread (blocking I/O)
76
+ |--- http.get ------------> OS kernel (non-blocking)
77
+ |--- crypto.pbkdf2 ------> Worker thread (CPU-bound)
78
+ |
79
+ <--- callback/promise resolution via event queue
80
+ ```
81
+
82
+ **Performance characteristics:**
83
+ - Single-threaded: zero lock contention, zero context switching for JS code
84
+ - Handles 10,000+ concurrent connections per process with ~50MB RAM
85
+ - Node.js is 40-60% faster than Python for handling concurrent connections ([Dev.to Benchmark](https://dev.to/m-a-h-b-u-b/nodejs-vs-python-real-benchmarks-performance-insights-and-scalability-analysis-4dm5))
86
+ - Worker threads available for CPU-bound tasks; benchmarks show up to 10x speedup for CPU-heavy operations ([Medium - Worker Threads](https://medium.com/codex/achieve-the-best-performance-10x-faster-node-js-with-worker-threads-97fc2890e40f))
87
+ - Cluster module forks processes equal to CPU cores, multiplying throughput linearly for stateless HTTP servers
88
+
89
+ **Critical pitfall -- async/await in loops:**
90
+
91
+ ```javascript
92
+ // BAD: Sequential execution -- each iteration waits for the previous one
93
+ // Total time: N * avg_request_time
94
+ for (const url of urls) {
95
+ const result = await fetch(url); // blocks loop iteration
96
+ results.push(result);
97
+ }
98
+
99
+ // GOOD: Parallel execution -- all requests in flight simultaneously
100
+ // Total time: max(request_times)
101
+ const results = await Promise.all(urls.map(url => fetch(url)));
102
+ ```
103
+
104
+ Using await inside a loop can cause 14x slowdowns in some scenarios because each iteration serializes what should be concurrent work. Source: [Ajani Bilby - Async JS Performance](https://www.ajanibilby.com/blog/async-js-performance-apr23/)
105
+
106
+ ### Green Threads / Goroutines (Go)
107
+
108
+ Go's runtime multiplexes goroutines onto a small pool of OS threads (typically matching `GOMAXPROCS`, which defaults to the number of CPU cores). The Go scheduler is cooperative: goroutines yield at I/O operations, channel operations, and function calls.
109
+
110
+ **Performance characteristics:**
111
+ - Goroutine creation cost: ~2-4 KB stack (grows dynamically), vs ~1 MB per OS thread ([GeeksforGeeks](https://www.geeksforgeeks.org/go-language/golang-goroutine-vs-thread/))
112
+ - 100,000 goroutines consume a few hundred MB of RAM; equivalent OS threads would require ~100 GB
113
+ - Context switching happens in user-space (nanoseconds) vs kernel-space for OS threads (microseconds)
114
+ - 100,000 goroutines may use only 10-20 OS threads under the hood ([Dev.to - Go Routines vs Threads](https://dev.to/sajosam/go-routines-vs-threads-whats-the-difference-and-when-to-use-them-1g09))
115
+ - Thread pooling is unnecessary in Go because goroutine creation is cheap
116
+ - Channels provide CSP-style communication without shared mutable state
117
+
118
+ **Scaling behavior:**
119
+ Go performs well at moderate concurrency. However, one benchmark found Go's goroutines did not always outperform Java threads at 175+ virtual users, suggesting that raw scheduling efficiency is only one factor -- garbage collection pressure, memory allocation patterns, and runtime overhead matter too. Source: [Medium - Java vs Golang Performance Testing](https://medium.com/@mohnisha/java-vs-golang-performance-testing-4d0d6a5123fb)
120
+
121
+ ### async/await (Python)
122
+
123
+ Python's asyncio provides cooperative multitasking via coroutines. The GIL (Global Interpreter Lock) means only one thread executes Python bytecode at a time, making async the primary concurrency mechanism.
124
+
125
+ **Performance characteristics (Python 3.13+):**
126
+
127
+ | Mode | CPU-bound task (8 cores) | Source |
128
+ |------|-------------------------|--------|
129
+ | Single-threaded | 8.71s | [Python 3.14 No-GIL Analysis](https://engineersmeetai.substack.com/p/python-314s-no-gil-explained-and) |
130
+ | Multi-threaded (GIL enabled) | 8.66s (no improvement) | Same |
131
+ | Multi-threaded (GIL disabled, 3.13+) | 1.39s (6.3x speedup) | Same |
132
+ | Multi-processing | 1.45s (6.0x speedup) | Same |
133
+
134
+ For I/O-bound tasks, asyncio provides excellent concurrency without the GIL limitation, as the GIL is released during I/O waits. The pattern:
135
+
136
+ ```python
137
+ # BAD: Sequential I/O -- 10 requests at 100ms each = 1000ms
138
+ for url in urls:
139
+ result = await session.get(url)
140
+
141
+ # GOOD: Concurrent I/O -- 10 requests at 100ms each = ~100ms
142
+ results = await asyncio.gather(*[session.get(url) for url in urls])
143
+ ```
144
+
145
+ **Python 3.13 free-threading (no-GIL) status:** Available as an experimental build flag. Single-threaded performance incurs a 5-10% overhead compared to the standard GIL build due to more fine-grained locking. Source: [CodSpeed - State of Python 3.13 Free-Threading](https://codspeed.io/blog/state-of-python-3-13-performance-free-threading)
146
+
147
+ ### async/await (Rust with Tokio)
148
+
149
+ Rust's async model compiles to state machines at zero runtime cost. The Tokio runtime provides a multi-threaded, work-stealing scheduler.
150
+
151
+ **Performance characteristics:**
152
+ - Zero-cost abstractions: async functions compile to state machines, no heap allocation per future
153
+ - Tokio's work-stealing scheduler distributes tasks across a thread pool sized to CPU core count
154
+ - async-std was discontinued as of March 2025; Tokio is the canonical runtime ([corrode.dev](https://corrode.dev/blog/async/))
155
+ - Rust async excels for high-concurrency network services (proxies, API gateways) where predictable latency matters
156
+ - Overhead of async vs synchronous code is near-zero for I/O-bound work; for CPU-bound work, synchronous code with `rayon` thread pools is preferred
157
+
158
+ ### Java Virtual Threads (Project Loom, Java 21+)
159
+
160
+ Virtual threads are lightweight threads managed by the JVM, not the OS. They are mounted onto carrier (platform) threads for execution.
161
+
162
+ **Performance benchmarks:**
163
+ - Virtual threads achieve 3x+ throughput over platform threads for I/O-heavy web services ([Kloia Benchmark](https://www.kloia.com/blog/benchmarking-java-virtual-threads-a-comprehensive-analysis))
164
+ - 100,000 blocking tasks: 2.6 seconds (virtual threads) vs 18+ seconds (platform threads) ([Java Code Geeks](https://www.javacodegeeks.com/2024/12/java-virtual-threads-vs-traditional-threads-unlocking-performance-with-project-loom.html))
165
+ - One financial services firm saw 400% increase in request handling capacity switching from a 200-thread pool to virtual threads
166
+ - MariaDB benchmarks showed 5-9x higher throughput with virtual threads for JDBC calls
167
+ - Thread creation: virtual threads are 1.7x faster at 100K threads, 2.7x faster at 1.5M threads compared to platform threads ([Lund University Thesis](https://lup.lub.lu.se/student-papers/record/9166685/file/9166687.pdf))
168
+
169
+ ---
170
+
171
+ ## Thread Pools and Process Pools
172
+
173
+ ### Sizing Formulas
174
+
175
+ The optimal thread pool size depends on the workload profile. Using the wrong size either wastes resources (too large) or creates bottlenecks (too small).
176
+
177
+ **CPU-bound tasks:**
178
+ ```
179
+ Optimal threads = Number of CPU cores
180
+ ```
181
+
182
+ Adding threads beyond the core count for pure CPU work causes context switching overhead with zero throughput gain. On an 8-core machine, 8 threads processing matrix multiplication will outperform 16 threads due to reduced context switching.
183
+
184
+ **I/O-bound tasks (Brian Goetz formula from "Java Concurrency in Practice"):**
185
+ ```
186
+ Optimal threads = Number of CPUs * Target CPU Utilization * (1 + Wait Time / Service Time)
187
+ ```
188
+
189
+ Also expressed as:
190
+ ```
191
+ Optimal threads = Number of Cores * (1 + Blocking Coefficient)
192
+ ```
193
+
194
+ Where Blocking Coefficient = Wait Time / Compute Time.
195
+
196
+ Source: [Zalando Engineering - Thread Pool Sizing](https://engineering.zalando.com/posts/2019/04/how-to-set-an-ideal-thread-pool-size.html)
197
+
198
+ **Practical examples:**
199
+
200
+ | Workload | CPU Cores | Wait Time | Service Time | Ratio | Optimal Pool Size |
201
+ |----------|-----------|-----------|--------------|-------|-------------------|
202
+ | REST API calling external service | 8 | 100ms | 10ms | 10:1 | 8 * (1 + 10) = 88 |
203
+ | Database query execution | 8 | 50ms | 5ms | 10:1 | 8 * (1 + 10) = 88 |
204
+ | Image resizing (CPU-bound) | 8 | 0ms | 200ms | 0:1 | 8 * (1 + 0) = 8 |
205
+ | File parsing with disk I/O | 8 | 20ms | 20ms | 1:1 | 8 * (1 + 1) = 16 |
206
+ | Mixed API + computation | 8 | 80ms | 20ms | 4:1 | 8 * (1 + 4) = 40 |
207
+
208
+ **Little's Law validation:**
209
+ ```
210
+ L = lambda * W
211
+ ```
212
+ Where L = concurrent requests in system, lambda = arrival rate (req/s), W = average latency. If your API receives 1000 req/s with 100ms average latency, you need L = 1000 * 0.1 = 100 threads to avoid queuing. Source: [David Async - Little's Law](https://davidasync.medium.com/littles-law-tuning-the-thread-pool-size-fedfe4158fb)
213
+
214
+ ### Critical Rule: Never Mix Pool Types
215
+
216
+ Never mix CPU-bound and I/O-bound tasks in the same thread pool. I/O-bound pools need many threads (50-200+), which would cause excessive context switching for CPU-bound work. Use separate pools:
217
+
218
+ ```
219
+ [I/O Pool: 64 threads] --> handles network calls, DB queries
220
+ [CPU Pool: 8 threads] --> handles computation, transformation
221
+ [Scheduled Pool: 2-4] --> handles periodic tasks, timeouts
222
+ ```
223
+
224
+ Source: [InfoQ - Thread Pool Performance Tuning](https://www.infoq.com/articles/Java-Thread-Pool-Performance-Tuning/)
225
+
226
+ ### Process Pools
227
+
228
+ Process pools (Python's `multiprocessing.Pool`, Node.js `cluster`) create separate OS processes. Each process has its own memory space, eliminating shared-state issues but adding IPC overhead.
229
+
230
+ **When to use process pools over thread pools:**
231
+ - Python CPU-bound work (bypasses GIL)
232
+ - Isolation requirements (one task crash does not affect others)
233
+ - Memory-intensive tasks where GC pauses in one task should not affect others
234
+
235
+ **Trade-offs:**
236
+
237
+ | Dimension | Thread Pool | Process Pool |
238
+ |-----------|-------------|--------------|
239
+ | Memory overhead per worker | ~1 MB (stack) | 10-50 MB (full process) |
240
+ | Communication | Shared memory (fast) | IPC/serialization (slow) |
241
+ | Isolation | None (shared address space) | Full (separate memory) |
242
+ | Creation cost | ~100 microseconds | ~10 milliseconds |
243
+ | Best for | I/O-bound, shared-state tasks | CPU-bound, isolated tasks |
244
+
245
+ ---
246
+
247
+ ## Amdahl's Law: The Math of Diminishing Returns
248
+
249
+ ### The Formula
250
+
251
+ Gene Amdahl (1967) proved that the maximum speedup of a program is limited by its sequential fraction:
252
+
253
+ ```
254
+ Speedup(N) = 1 / (S + P/N)
255
+ ```
256
+
257
+ Where:
258
+ - S = fraction of work that is strictly sequential (0 to 1)
259
+ - P = fraction that is parallelizable (P = 1 - S)
260
+ - N = number of processors
261
+
262
+ As N approaches infinity:
263
+ ```
264
+ Maximum Speedup = 1 / S
265
+ ```
266
+
267
+ Source: [Wikipedia - Amdahl's Law](https://en.wikipedia.org/wiki/Amdahl's_law)
268
+
269
+ ### Practical Speedup Table
270
+
271
+ | Sequential Fraction (S) | 2 cores | 4 cores | 8 cores | 16 cores | 64 cores | Max (infinite) |
272
+ |--------------------------|---------|---------|---------|----------|----------|----------------|
273
+ | 1% | 1.99x | 3.88x | 7.48x | 13.91x | 39.26x | 100x |
274
+ | 5% | 1.90x | 3.48x | 5.93x | 9.14x | 15.42x | 20x |
275
+ | 10% | 1.82x | 3.08x | 4.71x | 6.40x | 8.77x | 10x |
276
+ | 25% | 1.60x | 2.29x | 2.91x | 3.37x | 3.82x | 4x |
277
+ | 50% | 1.33x | 1.60x | 1.78x | 1.88x | 1.97x | 2x |
278
+
279
+ ### Key Insight: Diminishing Returns Are Severe
280
+
281
+ With 10% sequential code on an 8-core machine, you achieve 4.71x speedup -- not 8x. Going from 8 to 16 cores adds only 1.69x more (from 4.71x to 6.40x), and going from 16 to 64 cores adds only 2.37x more. The cost of 4x more hardware yields only 37% more speedup. Source: [Splunk - Amdahl's Law](https://www.splunk.com/en_us/blog/learn/amdahls-law.html)
282
+
283
+ ### Gustafson's Law: The Counter-Argument
284
+
285
+ Gustafson (1988) argued that as processors increase, problem sizes increase too. Instead of parallelizing a fixed-size problem, real workloads scale:
286
+
287
+ ```
288
+ Scaled Speedup(N) = N - S * (N - 1)
289
+ ```
290
+
291
+ This means a 10% sequential fraction with 64 cores gives 57.7x speedup (not Amdahl's 8.77x) because the parallel portion grows with the available cores. In practice, both laws apply: Amdahl's for fixed-size latency-sensitive work, Gustafson's for throughput-oriented batch processing.
292
+
293
+ ### Practical Implication: Optimize the Sequential Part First
294
+
295
+ Before adding cores, reduce the sequential fraction. Converting 10% sequential to 5% sequential on 8 cores improves speedup from 4.71x to 5.93x -- a 26% improvement without adding any hardware.
296
+
297
+ ---
298
+
299
+ ## Lock-Free Data Structures and Atomic Operations
300
+
301
+ ### Why Locks Hurt Performance
302
+
303
+ A pair of lock/unlock operations on a Windows Critical Section takes ~23.5 nanoseconds. That seems fast, but under contention:
304
+
305
+ - At 60% lock duration with 4 threads, performance drops dramatically to near single-thread levels ([Preshing - Locks Aren't Slow](https://preshing.com/20111118/locks-arent-slow-lock-contention-is/))
306
+ - At 90% lock duration, multiple threads perform worse than a single thread
307
+ - Lock contention optimization achieved up to 54% reduction in execution time across 20 benchmarked programs ([Rice University - Analyzing Lock Contention](https://www.cs.rice.edu/~johnmc/papers/hpctoolkit-ppopp-2010.pdf))
308
+
309
+ ### Atomic Operations and CAS
310
+
311
+ Compare-and-Swap (CAS) is the fundamental primitive for lock-free programming:
312
+
313
+ ```
314
+ CAS(memory_location, expected_value, new_value):
315
+ atomically:
316
+ if *memory_location == expected_value:
317
+ *memory_location = new_value
318
+ return true
319
+ else:
320
+ return false
321
+ ```
322
+
323
+ CAS allows optimistic concurrency: each thread attempts an update and retries only when another thread modified the value first. This eliminates:
324
+ - Deadlocks (no locks to hold)
325
+ - Priority inversion (no blocking)
326
+ - Convoy effects (no waiting queues)
327
+
328
+ Source: [IN-COM - Lock-Free Data Structures](https://www.in-com.com/blog/implementing-lock-free-data-structures-in-high-concurrency-systems/)
329
+
330
+ ### Common Lock-Free Structures
331
+
332
+ | Structure | Use Case | Key Primitive | Typical Speedup vs Locked |
333
+ |-----------|----------|---------------|---------------------------|
334
+ | Atomic counter | Statistics, reference counting | fetch_add | 2-5x under contention |
335
+ | Lock-free queue (Michael-Scott) | Producer-consumer pipelines | CAS on head/tail | 1.5-3x under high contention |
336
+ | Lock-free stack (Treiber) | Work stealing, free lists | CAS on top | 2-4x under contention |
337
+ | Concurrent hash map | Caches, lookup tables | Per-bucket CAS | 3-10x for read-heavy workloads |
338
+ | Epoch-based reclamation | Memory management for lock-free structures | Atomic epoch counter | Enables safe memory reuse |
339
+
340
+ ### Challenges
341
+
342
+ - **ABA problem:** A CAS may succeed even though the value was changed and changed back. Solved with tagged pointers or hazard pointers.
343
+ - **Memory ordering:** CPUs and compilers reorder instructions. Lock-free code requires explicit memory ordering (acquire/release/seq_cst in C++/Rust).
344
+ - **Complexity:** Lock-free code is significantly harder to reason about and test. Use established libraries (Java's `java.util.concurrent.atomic`, C++ `<atomic>`, Rust's `crossbeam`) rather than writing custom implementations.
345
+
346
+ ---
347
+
348
+ ## The Actor Model
349
+
350
+ ### Concept
351
+
352
+ The actor model replaces shared mutable state with isolated actors that communicate exclusively via asynchronous message passing. Each actor:
353
+ - Processes one message at a time (no internal concurrency)
354
+ - Can create other actors
355
+ - Can send messages to other actors
356
+ - Maintains private state that is never directly accessed externally
357
+
358
+ ### Implementations and Performance
359
+
360
+ **Erlang/Elixir (BEAM VM):**
361
+ - Processes are extremely lightweight: ~0.3 KB initial memory, creation in ~1 microsecond
362
+ - Erlang handles millions of messages per second per node ([peerdh.com - Erlang vs Akka](https://peerdh.com/blogs/programming-insights/performance-benchmarks-of-erlangs-actor-model-versus-akka-in-scala))
363
+ - Scheduling: preemptive, reduction-based (each process gets ~4000 reductions before yielding)
364
+ - WhatsApp handled 2 million concurrent connections per server using Erlang
365
+ - Erlang's latency is consistently low due to efficient scheduling and per-process garbage collection
366
+
367
+ **Akka (JVM -- Scala/Java):**
368
+ - Actor creation: ~300 bytes per actor
369
+ - Can run 2.5 million actors per GB of heap memory
370
+ - Throughput: millions of messages per second on a single JVM
371
+ - Akka spawn time scales unpredictably beyond 10,000-20,000 actors compared to Erlang's linear scaling ([Glasgow University Research](https://www.dcs.gla.ac.uk/~trinder/papers/sac-18.pdf))
372
+
373
+ **Performance comparison:**
374
+
375
+ | Metric | Erlang/BEAM | Akka/JVM |
376
+ |--------|-------------|----------|
377
+ | Process/actor creation | ~1 microsecond | ~10 microseconds |
378
+ | Memory per actor | ~0.3 KB | ~0.3 KB |
379
+ | Message throughput | Millions/sec | Millions/sec |
380
+ | Latency consistency | Excellent (per-process GC) | Variable (stop-the-world GC) |
381
+ | Scaling predictability | Linear | Non-linear above 10K actors |
382
+ | Fault tolerance | Built-in supervisor trees | Supervisor strategies |
383
+
384
+ ### When to Use the Actor Model
385
+
386
+ Use actors when you have many independent entities with their own state (game servers, IoT device managers, chat systems, trading engines). Do not use actors when you need tight synchronization between components or shared data structures -- the message-passing overhead (~1-10 microseconds per message) adds up for tightly coupled operations.
387
+
388
+ ---
389
+
390
+ ## Parallel Algorithms
391
+
392
+ ### Map-Reduce
393
+
394
+ Splits data into chunks, processes each chunk independently (map), then combines results (reduce). Ideal when data partitions are independent.
395
+
396
+ ```
397
+ Input Data --> [Chunk 1] --> Map --> [Result 1] --\
398
+ --> [Chunk 2] --> Map --> [Result 2] ----> Reduce --> Final Result
399
+ --> [Chunk 3] --> Map --> [Result 3] --/
400
+ --> [Chunk N] --> Map --> [Result N] --/
401
+ ```
402
+
403
+ **Performance characteristics:**
404
+ - Linear speedup for embarrassingly parallel problems (each chunk independent)
405
+ - Bounded by the slowest mapper (straggler problem) and reduce step
406
+ - Optimal chunk size balances parallelism overhead vs work granularity
407
+ - Java Streams `parallelStream()` uses ForkJoinPool internally with work-stealing
408
+
409
+ ### Fork-Join
410
+
411
+ Recursively subdivides a problem until sub-problems are small enough to solve directly, then combines results bottom-up.
412
+
413
+ ```
414
+ Problem --> Fork --> [Sub-problem A] --> Fork --> [A1] --> Solve
415
+ --> Fork --> [A2] --> Solve
416
+ --> [Sub-problem B] --> Fork --> [B1] --> Solve
417
+ --> Fork --> [B2] --> Solve
418
+ --> Join results bottom-up
419
+ ```
420
+
421
+ **Performance characteristics:**
422
+ - Java's ForkJoinPool automatically scales threads to available processors
423
+ - Practical sequential cutoff thresholds: 500-5000 elements (below this, sequential is faster) ([Kent University - Fork/Join in the Wild](https://kar.kent.ac.uk/63829/1/pppj14-dewael-et-al-forkjoin-parallelism-in-the-wild.pdf))
424
+ - Work-stealing: idle threads steal tasks from busy threads' deques
425
+ - Overhead per fork: ~1-5 microseconds; only worthwhile when sub-problem computation exceeds this
426
+ - Classic applications: merge sort, quicksort, matrix multiplication, tree traversal
427
+
428
+ ### Pipeline Parallelism
429
+
430
+ Connects stages in a producer-consumer chain. Each stage processes data concurrently with other stages.
431
+
432
+ ```
433
+ Stage 1 (Parse) --> Stage 2 (Validate) --> Stage 3 (Transform) --> Stage 4 (Write)
434
+ | | | |
435
+ v v v v
436
+ Item N Item N-1 Item N-2 Item N-3
437
+ ```
438
+
439
+ **Performance characteristics:**
440
+ - Throughput determined by the slowest stage (bottleneck)
441
+ - Latency = sum of all stage times for a single item
442
+ - All stages active simultaneously once the pipeline is full
443
+ - Ideal when stages have roughly equal processing times
444
+ - Each stage can maintain state that is updated as data flows through
445
+ - Buffering between stages absorbs rate variations (bounded buffers prevent memory blowup)
446
+
447
+ Source: [JMU Computer Systems Fundamentals](https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/ParallelDesign.html)
448
+
449
+ ---
450
+
451
+ ## Common Bottlenecks
452
+
453
+ ### 1. Lock Contention
454
+
455
+ When multiple threads frequently compete for the same lock, throughput degrades to worse-than-single-threaded performance.
456
+
457
+ **Measured impact:**
458
+ - 4 threads with 60% lock duration: throughput collapses to single-thread levels
459
+ - Proper lock tuning achieves up to 37.58% performance improvement on x86 CPUs, 32.82% on ARM ([Springer - Lock Tuning](https://link.springer.com/chapter/10.1007/978-3-031-71177-0_20))
460
+ - With very small tasks (<1ms), adding a second thread decreases overall throughput compared to single-thread execution ([DZone - Lock Benchmark](https://dzone.com/articles/performance-benchmark-of-explicit-locks-part-1))
461
+
462
+ **Mitigation strategies:**
463
+ - Reduce critical section scope (hold locks for the minimum time)
464
+ - Use read-write locks when reads vastly outnumber writes
465
+ - Partition data to reduce contention (striped locks, ConcurrentHashMap segments)
466
+ - Consider lock-free structures for hot paths
467
+
468
+ ### 2. False Sharing
469
+
470
+ When threads modify different variables that happen to reside on the same CPU cache line (typically 64 bytes, 128 bytes on Apple M-series), the hardware cache coherency protocol forces constant invalidation.
471
+
472
+ **Measured impact:**
473
+ - Zen4 system (16 cores, 32 threads): false sharing causes 300x slowdown with 32 concurrent threads ([alic.dev - Measuring False Sharing](https://alic.dev/blog/false-sharing))
474
+ - 8-core benchmark with 100M increments: false sharing took ~2,500ms vs ~120ms with padding -- a 20x difference ([CoffeeBeforeArch](https://coffeebeforearch.github.io/2019/12/28/false-sharing-tutorial.html))
475
+ - Java benchmark: 51.6 ns/op with false sharing vs 28.4 ns/op with @Contended padding -- 82% overhead ([Baeldung - False Sharing](https://www.baeldung.com/java-false-sharing-contended))
476
+
477
+ **Fix:** Pad shared variables to separate cache lines:
478
+ ```java
479
+ // BAD: x and y likely share a cache line
480
+ long x; // Thread A writes
481
+ long y; // Thread B writes
482
+
483
+ // GOOD: @Contended ensures separate cache lines (Java)
484
+ @jdk.internal.vm.annotation.Contended
485
+ long x;
486
+ @jdk.internal.vm.annotation.Contended
487
+ long y;
488
+ ```
489
+
490
+ ### 3. Python's GIL (Global Interpreter Lock)
491
+
492
+ The GIL ensures only one thread executes Python bytecode at any time, making multi-threaded CPU-bound code effectively single-threaded.
493
+
494
+ **Measured impact (Python 3.13 benchmarks):**
495
+
496
+ | Configuration | CPU-bound time | Relative |
497
+ |---------------|---------------|----------|
498
+ | Single-threaded | 8.71s | 1.0x |
499
+ | Multi-threaded (GIL enabled) | 8.66s | 1.0x (no improvement) |
500
+ | Multi-threaded (GIL disabled) | 1.39s | 6.3x speedup |
501
+ | Multi-processing | 1.45s | 6.0x speedup |
502
+
503
+ Source: [Substack - Python 3.14 No-GIL Analysis](https://engineersmeetai.substack.com/p/python-314s-no-gil-explained-and)
504
+
505
+ **Workarounds:**
506
+ - Use `multiprocessing` for CPU-bound parallelism (separate processes, separate GILs)
507
+ - Use `asyncio` for I/O-bound concurrency (GIL is released during I/O waits)
508
+ - Use C extensions (NumPy, Pandas) that release the GIL during computation
509
+ - Use Python 3.13+ free-threading build (experimental, 5-10% single-thread overhead)
510
+
511
+ ### 4. Thread Pool Exhaustion
512
+
513
+ When all threads in a pool are blocked (waiting for I/O, locks, or downstream services), new requests queue indefinitely.
514
+
515
+ **Measured impact:**
516
+ - 1,000 concurrent requests with thread-per-request: ~1 GB RAM consumed by thread stacks alone ([Medium - Thread Pool Exhaustion Case Study](https://medium.com/@mekadinesh999/thread-pool-exhaustion-a-case-study-on-unintended-consequences-of-a-new-approach-77392616d8dc))
517
+ - .NET ThreadPool starvation causes cascading latency: p99 latency can spike from 50ms to 10+ seconds ([Microsoft - Debug ThreadPool Starvation](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/debug-threadpool-starvation))
518
+ - The sync-over-async pattern is the most common cause of ThreadPool starvation
519
+
520
+ **Mitigation:**
521
+ - Use async I/O to decouple threads from I/O operations (10-100x higher concurrency with same resources)
522
+ - Implement bounded queues with backpressure
523
+ - Use circuit breakers to fail fast when downstream services are slow
524
+ - Monitor queue depth and active thread count as leading indicators
525
+
526
+ ---
527
+
528
+ ## Anti-Patterns
529
+
530
+ ### 1. Shared Mutable State Without Synchronization
531
+
532
+ The most dangerous anti-pattern. Multiple threads reading and writing the same data structure without locks or atomic operations leads to data corruption, not just incorrect values.
533
+
534
+ **Consequence:** Silent data corruption that may only manifest under production load. A HashMap corrupted by concurrent writes in Java can enter an infinite loop, consuming 100% CPU on one core indefinitely.
535
+
536
+ **Fix:** Use concurrent data structures (ConcurrentHashMap), immutable data, or message-passing. Prefer designs where shared state is eliminated entirely.
537
+
538
+ ### 2. Creating Threads Per Request
539
+
540
+ Spawning a new OS thread for each incoming request is unsustainable past ~1,000 concurrent requests.
541
+
542
+ **Cost per thread:**
543
+ - Memory: ~1 MB stack space per thread
544
+ - Creation: ~100 microseconds on Linux
545
+ - 10,000 threads = 10 GB RAM for stacks alone + massive context switching overhead
546
+
547
+ Source: [LeanSentry - IIS Thread Pool Guide](https://www.leansentry.com/guide/iis-aspnet-hangs/iis-thread-pool)
548
+
549
+ **Fix:** Use thread pools with bounded sizes, or virtual threads (Java 21+), or async I/O (Node.js, Python asyncio, Rust Tokio).
550
+
551
+ ### 3. Not Limiting Concurrency (Unbounded Parallelism)
552
+
553
+ Launching thousands of concurrent operations without limits overwhelms downstream systems, exhausts file descriptors, and triggers OOM kills.
554
+
555
+ ```python
556
+ # BAD: 10,000 simultaneous HTTP requests -- will exhaust connections/FDs
557
+ tasks = [fetch(url) for url in ten_thousand_urls]
558
+ await asyncio.gather(*tasks)
559
+
560
+ # GOOD: Bounded concurrency with semaphore
561
+ semaphore = asyncio.Semaphore(50) # Max 50 concurrent requests
562
+ async def bounded_fetch(url):
563
+ async with semaphore:
564
+ return await fetch(url)
565
+ tasks = [bounded_fetch(url) for url in ten_thousand_urls]
566
+ await asyncio.gather(*tasks)
567
+ ```
568
+
569
+ ### 4. Sync-Over-Async
570
+
571
+ Blocking on an async operation inside a thread pool thread. This consumes a pool thread for the entire duration of the I/O wait, converting an async benefit into a thread pool exhaustion problem.
572
+
573
+ ```csharp
574
+ // BAD: Blocks the thread pool thread
575
+ var result = GetDataAsync().Result; // .Result blocks synchronously
576
+
577
+ // GOOD: Propagate async all the way up
578
+ var result = await GetDataAsync();
579
+ ```
580
+
581
+ ### 5. Premature Parallelization
582
+
583
+ Adding parallelism to code where the sequential version is fast enough, or where the overhead exceeds the benefit.
584
+
585
+ **Rule of thumb:** Parallelism overhead (thread creation, synchronization, data partitioning) is typically 10-100 microseconds. If the total work is less than 1 millisecond, parallelism will slow it down. Fork-join cutoff thresholds of 500-5000 elements exist for this reason.
586
+
587
+ ---
588
+
589
+ ## Race Conditions, Deadlocks, and Debugging
590
+
591
+ ### Race Conditions
592
+
593
+ A race condition occurs when the correctness of a program depends on the relative timing of thread execution. They are non-deterministic: code may pass 999 tests and fail on the 1,000th.
594
+
595
+ **Classic example -- check-then-act:**
596
+ ```
597
+ Thread A Thread B
598
+ -------- --------
599
+ if (balance >= 100):
600
+ if (balance >= 100):
601
+ balance -= 100 balance -= 100 // Double withdrawal!
602
+ ```
603
+
604
+ **Detection tools:**
605
+ - ThreadSanitizer (C/C++, Go): compile-time instrumentation, detects data races at runtime
606
+ - Java: `-XX:+UseThreadSanitizer` (JDK 22+), jcstress for concurrency stress tests
607
+ - Go: `go run -race` flag (10-20x slowdown but catches races)
608
+ - Python: limited tooling; use `asyncio` debug mode for coroutine issues
609
+
610
+ ### Deadlocks
611
+
612
+ Four conditions must all hold for deadlock (Coffman conditions):
613
+ 1. **Mutual exclusion:** Resources cannot be shared
614
+ 2. **Hold and wait:** Process holds resources while waiting for others
615
+ 3. **No preemption:** Resources cannot be forcibly taken
616
+ 4. **Circular wait:** Circular chain of processes waiting for each other
617
+
618
+ **Prevention strategies and their performance cost:**
619
+
620
+ | Strategy | Approach | Performance Impact |
621
+ |----------|----------|-------------------|
622
+ | Lock ordering | Always acquire locks in consistent global order | Near-zero overhead |
623
+ | Lock timeout | Fail acquisition after timeout | Minimal overhead; risk of false failures |
624
+ | Try-lock | Non-blocking attempt, back off on failure | Retry overhead under contention |
625
+ | Lock-free design | Eliminate locks entirely | Higher development cost; potential CAS retry overhead |
626
+ | Resource hierarchy | Number resources, acquire in order | Requires global knowledge of all resources |
627
+
628
+ Source: [Tech Champion - Threading Without Tears](https://tech-champion.com/programming/threading-without-tears-mastering-deadlocks-data-races-and-safe-locking-patterns/)
629
+
630
+ ### Performance Debugging Toolkit
631
+
632
+ | Tool | Language/Platform | What It Detects |
633
+ |------|-------------------|-----------------|
634
+ | `perf` + flamegraphs | Linux (any language) | Lock contention, off-CPU time, syscall overhead |
635
+ | `async-profiler` | JVM | Lock contention, thread states, allocation hotspots |
636
+ | ThreadSanitizer | C/C++, Go, JVM | Data races, lock order violations |
637
+ | `py-spy` | Python | GIL contention, thread states |
638
+ | Tokio Console | Rust (Tokio) | Task scheduling, poll times, resource contention |
639
+ | eBPF-based tools | Linux kernel | Lock hold times, contention points system-wide |
640
+ | `go tool trace` | Go | Goroutine scheduling, blocking, GC pauses |
641
+
642
+ ---
643
+
644
+ ## Before/After: Sequential vs Parallel Speedups
645
+
646
+ ### Example 1: HTTP API Aggregation (I/O-Bound)
647
+
648
+ **Scenario:** Fetch data from 10 microservices, each averaging 100ms response time.
649
+
650
+ ```
651
+ BEFORE (Sequential):
652
+ Service 1 [100ms] -> Service 2 [100ms] -> ... -> Service 10 [100ms]
653
+ Total: 1,000ms
654
+
655
+ AFTER (Concurrent with async/await):
656
+ Service 1 [100ms]
657
+ Service 2 [100ms] All in parallel
658
+ ... [100ms]
659
+ Service 10 [100ms]
660
+ Total: ~105ms (100ms + overhead)
661
+
662
+ Speedup: 9.5x
663
+ ```
664
+
665
+ ### Example 2: Image Processing Pipeline (CPU-Bound)
666
+
667
+ **Scenario:** Resize 1,000 images, each taking 50ms of CPU time. 8-core machine.
668
+
669
+ ```
670
+ BEFORE (Single-threaded):
671
+ 1,000 images * 50ms = 50,000ms (50 seconds)
672
+
673
+ AFTER (Thread pool, 8 workers):
674
+ 1,000 images / 8 cores * 50ms = 6,250ms + scheduling overhead
675
+ Total: ~6,500ms (6.5 seconds)
676
+
677
+ Speedup: 7.7x (vs theoretical 8x -- 96% efficiency)
678
+ ```
679
+
680
+ ### Example 3: Database Batch Processing (Mixed)
681
+
682
+ **Scenario:** Process 100,000 records: 2ms read (I/O) + 5ms transform (CPU) + 3ms write (I/O) per record.
683
+
684
+ ```
685
+ BEFORE (Sequential):
686
+ 100,000 * (2 + 5 + 3)ms = 1,000,000ms (16.7 minutes)
687
+
688
+ AFTER (Pipeline parallelism, 3 stages, 8 CPU workers for transform):
689
+ Stage 1 (Read): 200s / 50 concurrent reads = ~4s
690
+ Stage 2 (Transform): 500s / 8 CPU cores = ~62.5s
691
+ Stage 3 (Write): 300s / 50 concurrent writes = ~6s
692
+ Pipeline total: ~63s (bottleneck = transform stage)
693
+
694
+ Speedup: 15.9x
695
+ ```
696
+
697
+ ### Example 4: Python CPU-Bound with GIL Workaround
698
+
699
+ **Scenario:** Monte Carlo simulation, 100M iterations.
700
+
701
+ ```
702
+ BEFORE (Single-threaded Python):
703
+ Time: 45 seconds
704
+
705
+ AFTER (multiprocessing.Pool, 8 workers):
706
+ Time: 6.2 seconds
707
+ Speedup: 7.3x
708
+
709
+ AFTER (NumPy vectorized, single-threaded):
710
+ Time: 0.8 seconds
711
+ Speedup: 56x (vectorization often beats parallelism)
712
+
713
+ NOTE: Multi-threaded Python with GIL: 47 seconds (SLOWER than single-threaded
714
+ due to GIL contention overhead)
715
+ ```
716
+
717
+ ### Example 5: Java Virtual Threads vs Platform Threads
718
+
719
+ **Scenario:** Web server handling 10,000 concurrent requests, each making a 50ms database call.
720
+
721
+ ```
722
+ BEFORE (Platform threads, pool size 200):
723
+ 200 threads active, 9,800 requests queued
724
+ Queue wait: ~2,450ms average
725
+ Total p95: ~2,550ms
726
+
727
+ AFTER (Virtual threads, unbounded):
728
+ 10,000 virtual threads active simultaneously
729
+ No queuing delay
730
+ Total p95: ~55ms
731
+
732
+ Speedup: 46x reduction in p95 latency
733
+ ```
734
+
735
+ ---
736
+
737
+ ## Decision Tree: Threads, Async, or Processes?
738
+
739
+ Use this flowchart to select the right concurrency model for your workload:
740
+
741
+ ```
742
+ START: What is your workload type?
743
+ |
744
+ |---> CPU-BOUND (computation, encoding, simulation)?
745
+ | |
746
+ | |---> Language has GIL (Python)?
747
+ | | |
748
+ | | |---> YES: Use multiprocessing.Pool (processes)
749
+ | | | or NumPy/C extensions that release GIL
750
+ | | | Pool size = CPU core count
751
+ | | |
752
+ | | |---> NO: Use thread pool
753
+ | | Pool size = CPU core count
754
+ | | (Java: ForkJoinPool, Go: goroutines,
755
+ | | Rust: rayon, C++: std::thread)
756
+ | |
757
+ | |---> Is work decomposable into independent chunks?
758
+ | |---> YES: Map-reduce or fork-join pattern
759
+ | |---> NO: Pipeline parallelism (if stages are independent)
760
+ |
761
+ |---> I/O-BOUND (network, disk, database)?
762
+ | |
763
+ | |---> High concurrency needed (>1000 simultaneous operations)?
764
+ | | |
765
+ | | |---> YES: Use async/await
766
+ | | | Node.js: native event loop
767
+ | | | Python: asyncio
768
+ | | | Rust: Tokio
769
+ | | | Java 21+: virtual threads
770
+ | | | Go: goroutines + channels
771
+ | | |
772
+ | | |---> NO (<1000): Thread pool is simpler
773
+ | | Pool size = cores * (1 + wait/service ratio)
774
+ | |
775
+ | |---> Need backpressure / rate limiting?
776
+ | |---> YES: Bounded async with semaphore/channel
777
+ | |---> NO: Unbounded async (with monitoring)
778
+ |
779
+ |---> MIXED (I/O + CPU in same request)?
780
+ | |
781
+ | |---> Use SEPARATE pools:
782
+ | - Async/event loop for I/O orchestration
783
+ | - Dedicated CPU thread pool for computation
784
+ | - Never block the I/O pool with CPU work
785
+ | - Never saturate the CPU pool with I/O waits
786
+ |
787
+ |---> NEED ISOLATION (crash safety, security boundaries)?
788
+ |
789
+ |---> Use processes (multiprocessing, child_process, containers)
790
+ Higher overhead but full isolation
791
+ ```
792
+
793
+ ### Quick Reference by Language
794
+
795
+ | Language | I/O Concurrency | CPU Parallelism | Recommended Default |
796
+ |----------|-----------------|-----------------|---------------------|
797
+ | JavaScript/Node.js | Event loop (native) | Worker threads / cluster | async/await + cluster for scaling |
798
+ | Python | asyncio | multiprocessing / C extensions | asyncio for I/O, multiprocessing for CPU |
799
+ | Go | Goroutines + channels | Goroutines (GOMAXPROCS) | Goroutines for everything |
800
+ | Rust | Tokio async | rayon thread pool | Tokio for I/O, rayon for CPU |
801
+ | Java 21+ | Virtual threads | ForkJoinPool / parallel streams | Virtual threads for I/O, ForkJoinPool for CPU |
802
+ | C# | async/await (Task) | Parallel.For / PLINQ | async for I/O, Parallel for CPU |
803
+ | Erlang/Elixir | BEAM processes | BEAM schedulers | Processes (actor model) for everything |
804
+
805
+ ---
806
+
807
+ ## Sources
808
+
809
+ - [Uplatz - Comparative Analysis of Modern Concurrency Models](https://uplatz.com/blog/a-comparative-analysis-of-modern-concurrency-models-architecture-performance-and-application/)
810
+ - [Dev.to - Node.js vs Python Real Benchmarks](https://dev.to/m-a-h-b-u-b/nodejs-vs-python-real-benchmarks-performance-insights-and-scalability-analysis-4dm5)
811
+ - [Ajani Bilby - Async JS Performance](https://www.ajanibilby.com/blog/async-js-performance-apr23/)
812
+ - [V8 Blog - Faster Async Functions and Promises](https://v8.dev/blog/fast-async)
813
+ - [Medium - Hidden Cost of async/await in Loops](https://medium.com/@ruslan.alekseyev/the-hidden-cost-of-async-await-in-loops-a-real-world-scenario-of-surging-cpu-usage-in-node-js-095df92c805a)
814
+ - [Zalando Engineering - How to Set an Ideal Thread Pool Size](https://engineering.zalando.com/posts/2019/04/how-to-set-an-ideal-thread-pool-size.html)
815
+ - [OneUptime - How to Tune Thread Pools for Performance](https://oneuptime.com/blog/post/2026-01-25-tune-thread-pools-performance/view)
816
+ - [InfoQ - Java Thread Pool Performance Tuning](https://www.infoq.com/articles/Java-Thread-Pool-Performance-Tuning/)
817
+ - [David Async - Little's Law and Thread Pool Sizing](https://davidasync.medium.com/littles-law-tuning-the-thread-pool-size-fedfe4158fb)
818
+ - [Dev.to - Go Routines vs Threads](https://dev.to/sajosam/go-routines-vs-threads-whats-the-difference-and-when-to-use-them-1g09)
819
+ - [GeeksforGeeks - Golang Goroutine vs Thread](https://www.geeksforgeeks.org/go-language/golang-goroutine-vs-thread/)
820
+ - [Medium - Java vs Golang Performance Testing](https://medium.com/@mohnisha/java-vs-golang-performance-testing-4d0d6a5123fb)
821
+ - [Wikipedia - Amdahl's Law](https://en.wikipedia.org/wiki/Amdahl's_law)
822
+ - [Splunk - Amdahl's Law](https://www.splunk.com/en_us/blog/learn/amdahls-law.html)
823
+ - [Cornell Virtual Workshop - Amdahl's Law](https://cvw.cac.cornell.edu/parallel/efficiency/amdahls-law)
824
+ - [Preshing - Locks Aren't Slow; Lock Contention Is](https://preshing.com/20111118/locks-arent-slow-lock-contention-is/)
825
+ - [IN-COM - Implementing Lock-Free Data Structures](https://www.in-com.com/blog/implementing-lock-free-data-structures-in-high-concurrency-systems/)
826
+ - [Tech Champion - Threading Without Tears](https://tech-champion.com/programming/threading-without-tears-mastering-deadlocks-data-races-and-safe-locking-patterns/)
827
+ - [peerdh.com - Erlang Actor Model vs Akka Benchmarks](https://peerdh.com/blogs/programming-insights/performance-benchmarks-of-erlangs-actor-model-versus-akka-in-scala)
828
+ - [Glasgow University - Erlang, Go, and Scala with Akka](https://www.dcs.gla.ac.uk/~trinder/papers/sac-18.pdf)
829
+ - [alic.dev - Measuring the Impact of False Sharing](https://alic.dev/blog/false-sharing)
830
+ - [Baeldung - False Sharing and @Contended](https://www.baeldung.com/java-false-sharing-contended)
831
+ - [CoffeeBeforeArch - False Sharing Tutorial](https://coffeebeforearch.github.io/2019/12/28/false-sharing-tutorial.html)
832
+ - [Substack - Python 3.14 No-GIL Explained and Performance Analysis](https://engineersmeetai.substack.com/p/python-314s-no-gil-explained-and)
833
+ - [CodSpeed - State of Python 3.13 Performance Free-Threading](https://codspeed.io/blog/state-of-python-3-13-performance-free-threading)
834
+ - [Kloia - Benchmarking Java Virtual Threads](https://www.kloia.com/blog/benchmarking-java-virtual-threads-a-comprehensive-analysis)
835
+ - [Java Code Geeks - Virtual Threads vs Traditional Threads](https://www.javacodegeeks.com/2024/12/java-virtual-threads-vs-traditional-threads-unlocking-performance-with-project-loom.html)
836
+ - [Lund University - Comparison of Concurrency Technologies in Java](https://lup.lub.lu.se/student-papers/record/9166685/file/9166687.pdf)
837
+ - [Medium - 10x Faster Node.js with Worker Threads](https://medium.com/codex/achieve-the-best-performance-10x-faster-node-js-with-worker-threads-97fc2890e40f)
838
+ - [Microsoft - Debug ThreadPool Starvation](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/debug-threadpool-starvation)
839
+ - [Medium - Thread Pool Exhaustion Case Study](https://medium.com/@mekadinesh999/thread-pool-exhaustion-a-case-study-on-unintended-consequences-of-a-new-approach-77392616d8dc)
840
+ - [Rice University - Analyzing Lock Contention](https://www.cs.rice.edu/~johnmc/papers/hpctoolkit-ppopp-2010.pdf)
841
+ - [Springer - Lock Tuning for High-Concurrency Systems](https://link.springer.com/chapter/10.1007/978-3-031-71177-0_20)
842
+ - [DZone - Performance Benchmark of Explicit Locks](https://dzone.com/articles/performance-benchmark-of-explicit-locks-part-1)
843
+ - [Kent University - Fork/Join Parallelism in the Wild](https://kar.kent.ac.uk/63829/1/pppj14-dewael-et-al-forkjoin-parallelism-in-the-wild.pdf)
844
+ - [JMU - Parallel Design Patterns](https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/ParallelDesign.html)
845
+ - [corrode.dev - The State of Async Rust](https://corrode.dev/blog/async/)
846
+ - [LeanSentry - IIS Thread Pool Expert Guide](https://www.leansentry.com/guide/iis-aspnet-hangs/iis-thread-pool)
847
+ - [Tokio Blog - Making the Scheduler 10x Faster](https://tokio.rs/blog/2019-10-scheduler)