From: | chap(at)anastigmatix(dot)net |
---|---|
To: | Konstantin Knizhnik <knizhnik(at)garret(dot)ru> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Let's make PostgreSQL multi-threaded |
Date: | 2023-06-06 15:48:23 |
Message-ID: | 6c99fe026eea03fd8aac91aac7143301@anastigmatix.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2023-06-06 08:06, Konstantin Knizhnik wrote:
> 7. It will be hard to support non-multithreaded PL languages (like
> python), but for example support of Java will be more natural and
> efficient.
To this I say ...
Hmm.
Surely, the current situation with a JVM in each backend process
(that calls for one) has been often seen as heavier than desirable.
At the same time, I am not sure how manageable one giant process
with one giant JVM instance would prove to be, either.
It is somewhat nice to be able to tweak JVM settings in a session
and see what happens, without disrupting other sessions. There may
also exist cases for different JVM settings in per-user or per-
database GUCs.
Like Python with the GIL, it is documented for JNI_CreateJavaVM
that "Creation of multiple VMs in a single process is not
supported."[1]
And the devs of Java, in their immeasurable wisdom, have announced
a "JDK Enhancement Proposal" (that's just what these things are
called, don't blame Orwell), JEP 411[2][3], in which all of the
Security Manager features that PL/Java relies on for bounds on
'trusted' behavior are deprecated for eventual removal with no
functional replacement. I'd be even more leery of using one big
shared JVM for everybody's work after that happens.
Might the work toward allowing a run-time choice between a
process or threaded model also make possible some
intermediate models as well? A backend process for
connections to a particular database, or with particular
authentication credentials? Go through the authentication
handshake and then sendfd the connected socket to the
appropriate process. (Has every supported platform got
something like sendfd?)
That way, there could be some flexibility to arrange how many
distinct backends (and, for Java purposes, how many JVMs) get
fired up, and have each sharing sessions that have something in
common.
Or, would that just require all the complexity of both
approaches to synchronization, with no sufficient benefit?
Regards,
-Chap
[1]
https://docs.oracle.com/en/java/javase/17/docs/specs/jni/invocation.html#jni_createjavavm
[2]
https://blogs.apache.org/netbeans/entry/jep-411-deprecate-the-security1
[3] https://github.com/tada/pljava/wiki/JEP-411
From | Date | Subject | |
---|---|---|---|
Next Message | Jacob Champion | 2023-06-06 15:50:36 | Re: RFC: logical publication via inheritance root? |
Previous Message | Heikki Linnakangas | 2023-06-06 15:46:48 | Re: Let's make PostgreSQL multi-threaded |