我对 Loom 项目非常感兴趣,但有一件事我无法完全理解。
\n大多数 Java 服务器使用具有一定线程限制(200、300 ..)的线程池,但是,您不受操作系统的限制可以产生更多线程,我已经读到,通过针对 Linux 的特殊配置,您可以达到巨大的数量。
\n操作系统线程成本更高,启动/停止速度更慢,必须处理上下文切换(按数量放大),并且您依赖于操作系统,而操作系统可能拒绝为您提供更多线程。
\n话虽如此,虚拟线程也消耗类似数量的内存(或者至少我是这么理解的)。使用 Loom,我们可以进行尾部调用优化,这应该会减少内存使用。另外,同步和线程上下文复制应该仍然是一个类似大小的问题。
\n事实上,您可以生成数百万个虚拟线程
\npublic static void main(String[] args) {\n for (int i = 0; i < 1_000_000; i++) {\n Thread.startVirtualThread(() -> {\n try {\n Thread.sleep(1000);\n } catch (Exception e) {\n e.printStackTrace();\n }\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n当我使用平台线程时,上面的代码在 25k 左右中断并出现 OOM 异常。
\n我的问题是,到底是什么让这些线程如此轻量,是什么阻止我们生成 100 万个平台线程并使用它们,是否只是上下文切换使常规线程如此“重”。
\n一个非常相似的问题
\n到目前为止我发现的事情:
\n我在本地计算机上运行了独立的keycloak。
我创建了一个名为“ spring-test”的新领域,然后创建了一个名为“ login-app”的新客户端
根据其余文档:
POST: http://localhost:8080/auth/realms/spring-test/protocol/openid-connect/token
{
"client_id": "login-app",
"username": "user123",
"password": "pass123",
"grant_type": "password"
}
Run Code Online (Sandbox Code Playgroud)
应该给我jwt令牌,但是我收到了错误的请求并做出了回应
{
"error": "invalid_request",
"error_description": "Missing form parameter: grant_type"
}
Run Code Online (Sandbox Code Playgroud)
我假设我的配置中缺少某些内容。
编辑:我正在使用json正文,但它应该是形式url编码:以下正文有效:
token_type_hint:access_token&token:{token}&client_id:{client_id}&client_secret:{client_secret}
Run Code Online (Sandbox Code Playgroud) 我已经为我的 keycloak 实例启用了谷歌社交登录,但我需要将它用作休息服务。
是否有可用于执行此操作的端点?
我已经训练了 gensim doc2Vec 模型,它可以找到与未知文档最相似的文档。
现在我需要找到两个未知文档之间的相似度值(它们不在训练数据中,所以它们不能被 doc id 引用)
d2v_model = doc2vec.Doc2Vec.load(model_file)
string1 = 'this is some random paragraph'
string2 = 'this is another random paragraph'
vec1 = d2v_model.infer_vector(string1.split())
vec2 = d2v_model.infer_vector(string2.split())
Run Code Online (Sandbox Code Playgroud)
在上面的代码中 vec1 和 vec2 被成功初始化为一些值和大小 - 'vector_size'
现在查看 gensim api 和示例,我找不到适合我的方法,他们都期待 TaggedDocument
我可以按值比较特征向量值,如果它们更接近 => 文本更相似吗?
我正在从事非春季启动项目。
有大量的数据对象,使用 JsonFormat 注释所有日期字段开始变得不方便。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = JacksonSerialiser.DATE_FORMAT)
private Date someDate;
Run Code Online (Sandbox Code Playgroud)
我知道我可以直接在 ObjectMapper 上设置日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
OBJECT_MAPPER.setDateFormat(simpleDateFormat);
Run Code Online (Sandbox Code Playgroud)
如果所有序列化/反序列化都是直接使用对象映射器完成的,则此方法有效。
您可以通过扩展来实现 CustomDateSerializer StdSerializer<Date>,但为了应用格式,您需要在字段级别指定它,如下所示:
@JsonSerialize(using = CustomDateSerializer.class)
public Date someDate;
Run Code Online (Sandbox Code Playgroud)
对于 Spring Boot,您可以使用以下属性:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
Run Code Online (Sandbox Code Playgroud)
如果我可以在没有弹簧的情况下设置这样的属性,那就太好了。
使用摘要来跟踪我要跟踪的请求大小
我可以这样做
meterRegistry.summary("request.size", <tag for url>).record(<size>);
Run Code Online (Sandbox Code Playgroud)
不过,我可以使用计数器和最大尺寸的仪表来实现相同的目的
meterRegistry.counter("request.size.total", <tag for url>).increment(<size>);
meterRegistry.counter("request.size.count", <tag for url>).increment();
meterRegistry.gauge("request.size.max", <tag for url>).set(<new value if needed>);
// and the gauge value will be stored in atomic variable
Run Code Online (Sandbox Code Playgroud)
问题是,与较长的解决方案相比,摘要除了更短之外还有什么好处吗?
我最近对c ++代码有一个非常奇怪的问题.我以简约的例子再现了这个案例.我们有一个Egg类:
class Egg
{
private:
const char* name;
public:
Egg() {};
Egg(const char* name) {
this->name=name;
}
const char* getName() {
return name;
}
};
Run Code Online (Sandbox Code Playgroud)
我们还有一个篮子类来举行鸡蛋
const int size = 15;
class Basket
{
private:
int currentSize=0;
Egg* eggs;
public:
Basket(){
eggs=new Egg[size];
}
void addEgg(Egg e){
eggs[currentSize]=e;
currentSize++;
}
void printEggs(){
for(int i=0; i<currentSize; i++)
{
cout<<eggs[i].getName()<<endl;
}
}
~Basket(){
delete[] eggs;
}
};
Run Code Online (Sandbox Code Playgroud)
所以这里是按预期工作的示例.
Basket basket;
Egg egg1("Egg1");
Egg egg2("Egg2");
basket.addEgg(egg1);
basket.addEgg(egg2);
basket.printEggs();
//Output: Egg1 Egg2
Run Code Online (Sandbox Code Playgroud)
这是预期的结果,但如果我想根据一些循环变量添加生成名称的N个蛋,我有以下问题. …
从广义上讲,word2vec的训练是一个过程,在这个过程中,通常在同一个上下文中的单词在向量空间中聚集在一起.我们首先随机改变平面上的单词然后随着每次迭代形成越来越多的集群.我想我理解了这一点,但是我们怎样才能确保反义词或很少出现在同一语境中的词语最终不会出现在附近的群集中?另外,我们怎么能知道更无关紧要的词语比不那么无关紧要的词语更远.
我正在使用ngx-material-timepicker创建日期和时间选择器。
这是我模板的相关部分。(我没有组件的额外 css)
<div class="container">
<div class="row">
<div class="col-sm-6">
<mat-form-field>
<input
matInput
[matDatepicker]="picker"
placeholder="Choose a date"
[min]="minDate"
[(ngModel)]="chosenDate"
(ngModelChange)="dateChanged()"
/>
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
</div>
<div class="col-sm-6">
<mat-form-field>
<input
matInput
[ngxTimepicker]="timePick"
placeholder="Chose time"
[min]="minTime"
[(ngModel)]="chosenTime"
(ngModelChange)="timeChanged()"
/>
<ngx-material-timepicker-toggle
[for]="timePick"
></ngx-material-timepicker-toggle>
<ngx-material-timepicker
[defaultTime]="minTime"
#timePick
></ngx-material-timepicker>
</mat-form-field>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
日期选择器工作正常,但时间选择器的切换按钮未按应有的方式对齐。我遵循了官方文档
如何像日历一样对齐时钟?
java ×5
keycloak ×2
nlp ×2
angular ×1
c++ ×1
date ×1
doc2vec ×1
gensim ×1
jackson ×1
json ×1
login ×1
metrics ×1
micrometer ×1
monitoring ×1
pointers ×1
project-loom ×1
prometheus ×1
python ×1
rest ×1
stream ×1
string ×1
timepicker ×1
word2vec ×1