diff --git a/src/util/sys_info.cc b/src/util/sys_info.cc
index 4cf71db..20bbdf7 100644
--- a/src/util/sys_info.cc
+++ b/src/util/sys_info.cc
@@ -122,7 +122,14 @@
 
   return static_cast<int>(res);
 #elif defined(OS_WIN)
-  return ::GetActiveProcessorCount(ALL_PROCESSOR_GROUPS);
+  // On machines with more than 64 logical processors this will not return the
+  // full number of processors. Instead it will return the number of processors
+  // in one processor group - something smaller than 65. However this is okay
+  // because gn doesn't parallelize well beyond 10-20 threads - it starts to run
+  // slower.
+  SYSTEM_INFO system_info = {};
+  ::GetNativeSystemInfo(&system_info);
+  return system_info.dwNumberOfProcessors;
 #else
 #error
 #endif
diff --git a/src/util/worker_pool.cc b/src/util/worker_pool.cc
index f594699..c1105d6 100644
--- a/src/util/worker_pool.cc
+++ b/src/util/worker_pool.cc
@@ -7,50 +7,10 @@
 #include "base/command_line.h"
 #include "base/strings/string_number_conversions.h"
 #include "gn/switches.h"
-#include "util/build_config.h"
 #include "util/sys_info.h"
 
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-
 namespace {
 
-#if defined(OS_WIN)
-class ProcessorGroupSetter {
- public:
-  void SetProcessorGroup(std::thread* thread);
-
- private:
-  int group_ = 0;
-  GROUP_AFFINITY group_affinity_;
-  int num_available_cores_in_group_ = ::GetActiveProcessorCount(group_) / 2;
-  const int num_groups_ = ::GetActiveProcessorGroupCount();
-};
-
-void ProcessorGroupSetter::SetProcessorGroup(std::thread* thread) {
-  if (num_groups_ <= 1)
-    return;
-
-  const HANDLE thread_handle = HANDLE(thread->native_handle());
-  ::GetThreadGroupAffinity(thread_handle, &group_affinity_);
-  group_affinity_.Group = group_;
-  const bool success =
-      ::SetThreadGroupAffinity(thread_handle, &group_affinity_, nullptr);
-  DCHECK(success);
-
-  // Move to next group once one thread has been assigned per core in |group_|.
-  num_available_cores_in_group_--;
-  if (num_available_cores_in_group_ <= 0) {
-    group_++;
-    if (group_ >= num_groups_) {
-      group_ = 0;
-    }
-    num_available_cores_in_group_ = ::GetActiveProcessorCount(group_) / 2;
-  }
-}
-#endif
-
 int GetThreadCount() {
   std::string thread_count =
       base::CommandLine::ForCurrentProcess()->GetSwitchValueString(
@@ -86,22 +46,9 @@
 WorkerPool::WorkerPool() : WorkerPool(GetThreadCount()) {}
 
 WorkerPool::WorkerPool(size_t thread_count) : should_stop_processing_(false) {
-#if defined(OS_WIN)
-  ProcessorGroupSetter processor_group_setter;
-#endif
-
   threads_.reserve(thread_count);
-  for (size_t i = 0; i < thread_count; ++i) {
+  for (size_t i = 0; i < thread_count; ++i)
     threads_.emplace_back([this]() { Worker(); });
-
-#if defined(OS_WIN)
-    // Set thread processor group. This is needed for systems with more than 64
-    // logical processors, wherein available processors are divided into groups,
-    // and applications that need to use more than one group's processors must
-    // manually assign their threads to groups.
-    processor_group_setter.SetProcessorGroup(&threads_.back());
-#endif
-  }
 }
 
 WorkerPool::~WorkerPool() {
