On Tue, 9 Apr 2024 13:58:31 GMT, Jaikiran Pai <[email protected]> wrote:
>> This change drops the adjustments to the virtual thread scheduler's target
>> parallelism when virtual threads do file operations on files that are opened
>> for buffered I/O. These operations are usually just too short to have any
>> benefit and may have a negative benefit when reading/writing a small number
>> of bytes. There is no change for read/write operations on files opened for
>> direct I/O or when writing to files that are opened with options for
>> synchronized I/O file integrity (O_SYNC/O_DSYNC and equivalents). Sergery
>> Kuksenko is polishing benchmarks that includes this area, this is for a
>> future PR.
>>
>> In addition, the blocker mechanism is updated to handle reentrancy as can
>> happen if debugging code is added to ForkJoinPool, if there is preemption
>> when attempting to compensate, or potentially forced preemption in the
>> future. This part is a pre-requisite to the changes to better support object
>> monitor there are more places where preemption is possible and this quickly
>> leads to unbalanced begin/end.
>>
>> The changes have been baking in the loom repo for several months.
>
> src/java.base/share/classes/java/lang/System.java line 2262:
>
>> 2260: @Override
>> 2261: public long transferTo(OutputStream out) throws IOException {
>> 2262: boolean attempted = Blocker.begin();
>
> Hello Alan, why do we mark transferTo as potentially blocking operation which
> might need compensation? As far as I can see in the underlying implementation
> of `FileInputStream.transferTo()` it either calls the
> `FileChannel.transferTo()` or does a `in.read()` followed by `out.write()`.
> In either of those cases wouldn't the underlying `InputStream/OutputStream`
> already have the necessary `Blocker` calls?
It's to increase the target parallelism for the duration of the transfer rather
than specific read operations. System.in.transferTo(out) should be rare so it's
not super important of course.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18598#discussion_r1557786640