<p>When I googled, there were some answers saying that in kubernetes, 100ms cpu means that you are going to use 1/10 time of one cpu core, and 2300ms cpu means that you are going to use 2 cores fully and 3/10 time of another cpu core. Is it correct?</p>
<p>I just wonder if multiple threads can run in parallel on multiple cores at the same time when using under 1000ms cpu requests in kubernetes.</p>

Wood
<p>Regarding first part, it's true that you can use part of CPU resource to run some tasks.
In <a href="https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" rel="nofollow noreferrer">Kubernetes documentation - Managing Resources for Containers</a> you can find information that you can specify minimal resources requirements - <code>requests</code> to run pod and <code>limits</code> which cannot be exceeded.</p>
<p>It's well described in <a href="https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-resource-requests-and-limits" rel="nofollow noreferrer">this article</a></p>
<blockquote>
<p>Requests and limits are the mechanisms Kubernetes uses to control resources such as CPU and memory. Requests are what the container is guaranteed to get. If a container requests a resource, Kubernetes will only schedule it on a node that can give it that resource. Limits, on the other hand, make sure a container never goes above a certain value. The container is only allowed to go up to the limit, and then it is restricted.</p>
</blockquote>
<p><strong>CPU Requests/Limits:</strong></p>
<blockquote>
<p>CPU resources are defined in millicores. If your container needs two full cores to run, you would put the value <code>2000m</code>. If your container only needs ¼ of a core, you would put a value of <code>250m</code>.
One thing to keep in mind about CPU requests is that if you put in a value larger than the core count of your biggest node, your pod will never be scheduled.</p>
</blockquote>
<p><strong>Regarding second part, you can use multiple threads in parallel.</strong> Good example of this is <a href="https://kubernetes.io/docs/concepts/workloads/controllers/job/" rel="nofollow noreferrer">Kubernetes Job</a>.</p>
<blockquote>
<p>A simple case is to create one Job object in order to reliably run one Pod to completion. The Job object will start a new Pod if the first Pod fails or is deleted (for example due to a node hardware failure or a node reboot).
You can also use a Job to run multiple Pods in parallel.</p>
</blockquote>
<p>Especially part about <a href="https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs" rel="nofollow noreferrer">Parallel execution for Jobs </a></p>
<p>You can also check <a href="https://kubernetes.io/docs/tasks/job/parallel-processing-expansion/" rel="nofollow noreferrer">Parallel Processing using Expansions</a> to run multiple <code>Jobs</code> based on a common template. <strong>You can use this approach to process batches of work in parallel.</strong> In this documentation you can find example with description how it works.</p>
